list以及使用举例--C++基础

简介: list以及使用举例--C++基础

序列式容器:

list是一个双向列表,它不是像vector那种连续线性空间,每次插入或者删除一个元素的时候,就配置或释放一个元素空间,因此list对空间不浪费。


list不仅是一个双向列表,还是一个环状双向列表,它执行插入操作时候,会插入到迭代器所在位置之前。


先看代码示例:

#include"Test.h"
#include<vector>
#include<list>
#include<array>
#include<algorithm>//为了使用find、sort等方法
void main()
{
  setlocale(LC_ALL, "chs");//识别中文
  //用list实现增改删除
  list<int> v1;
  //初始化
  v1.push_back(0);
  v1.push_back(2);
  v1.push_back(1);
  v1.push_front(3);
  for (list<int>::iterator v2 = v1.begin();
    v2 != v1.end();
    v2++)
  {
    cout << *v2 << endl;
  }
  list<int>::iterator v3 = find(v1.begin(), v1.end(), 2);
  if (*v3 == 2)
  {
    //增
    v1.insert(v3, 8);
  }
  v3 = find(v1.begin(), v1.end(), 1);
  if (*v3 == 1)
  {
    //改
    *v3 = 99;
  }
  for (list<int>::iterator v2 = v1.begin();
    v2 != v1.end();)
  {
    //查
    if (*v2 == 2)
    {
      //删
      v2 = v1.erase(v2);
    }
    else
    {
      v2++;
    }
  }
  //sort(v1.begin(), v1.end());
  int v5[4] = { 9,7,8,6 };
  list<int> v7(v5, v5 + 4);
  v3 = find(v1.begin(), v1.end(), 8);
  v1.splice(v3, v7);//插入一个list列表
  v1.reverse();//反转列表
  v1.sort();//排序
  for (list<int>::iterator v2 = v1.begin();
    v2 != v1.end();
    v2++)
  {
    cout << *v2 << endl;
  }
  getchar();
}

还有需要注意的一点是,不能调用全局的那个sort函数对list进行排序,需要用其内部的排序函数进行排序。


如果这样写:sort(v1.begin(), v1.end());

那么会发生编译报错:

image.png

我们需要使用其内部定义的函数进行排序操作:

v1.sort();

原因:

list不能使用STL的sort算法,必须使用自己的成员函数,因为STL的sort的函数只接受RamdonAccessIterator(随机访问迭代器,类似于vector的返回迭代器),其内部成员函数使用快速排序。


image.png

调试信息:

image.png


image.png


image.png


image.png


image.png


image.png


image.png

“It matters not what someone is born,but what they grow to be.”

参考资料:

《STL源码剖析》

目录
相关文章
|
5天前
|
调度 C++ 容器
【C++】手搓 list 容器
本文我们实现了STL库中重要的list 的模拟实现,其中最重要莫过于迭代器的封装类的书写,这是前所未有的操作(对于我来说,我是第一次使用这种结构)。通过list 的模拟实现也帮我们巩固了类与对象的知识,也强化了指针操作的思路。欢迎大家讨论分析。
12 1
|
7天前
|
存储 编译器 C++
【C++/STL】list(常见接口、模拟实现、反向迭代器、)
【C++/STL】list(常见接口、模拟实现、反向迭代器、)
5 0
|
20天前
|
存储 缓存 编译器
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
|
20天前
|
算法 C++ 容器
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
|
21天前
|
C++
c++的学习之路:16、list(3)
c++的学习之路:16、list(3)
12 0
|
21天前
|
C++
c++的学习之路:15、list(2)
c++的学习之路:15、list(2)
14 0
|
21天前
|
存储 C++ 容器
c++的学习之路:14、list(1)
c++的学习之路:14、list(1)
18 0
|
1月前
|
编译器 C++ 容器
【C++初阶】STL详解(八)List的模拟实现
【C++初阶】STL详解(八)List的模拟实现
39 0
|
1月前
|
存储 C++ 容器
【C++初阶】STL详解(五)List的介绍与使用
【C++初阶】STL详解(五)List的介绍与使用
33 0
|
1月前
|
存储 算法 编译器
【C++初阶】11. list的使用及模拟实现
【C++初阶】11. list的使用及模拟实现
52 3