分享

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

 KookNut39 2021-12-15

序列式容器:
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());
那么会发生编译报错:
在这里插入图片描述
我们需要使用其内部定义的函数进行排序操作:

v1.sort();

原因:
list不能使用STL的sort算法,必须使用自己的成员函数,因为STL的sort的函数只接受RamdonAccessIterator(随机访问迭代器,类似于vector的返回迭代器),其内部成员函数使用快速排序。
在这里插入图片描述
调试信息:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
“It matters not what someone is born,but what they grow to be.”
参考资料:
《STL源码剖析》

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多