您的位置:首页 > 编程语言 > C语言/C++

C++ List 常见用法全解(代码版)

2018-01-11 16:54 253 查看
C++ list 常见用法:

list 双向链表 顺序容器

与向量vector相比,插入和删除是常数时间,但是不能随机访问

void bianli(list<int>& vt) //list是不能直接访问数组索引的。底层实现是链表。
{
//遍历1 c++11的新特性

for (auto it : vt)
cout<<it<<" ";
cout<<endl;

//遍历2 正向迭代器访问
for (auto it = vt.begin(); it != vt.end(); it++)
cout<<*it<<" ";
cout<<endl;
}

bool compare(int a, int b) //对于自定义类型,就需要自己写比较函数。用来sort等功能
{
return a > b;
}

void list_test()
{
//创建
list<int> vt1;
list<int> vt2(3, 1); //初始push进去3个1
list<int> vt3(vt2); //用vt2构造vt3
list<int> vt4(vt2.begin(), vt2.end()); //vt2的迭代器圈定的部分初始化vt4

//插入
vt1.push_back(2); //list可以前后插入,其实vector也可以
vt1.push_front(5);
vt2.insert(vt2.begin(), 3); //在某个位置插入value。 注意vt.begin()是在第一个值的前面插入。
vt2.insert(vt2.end(), 7, 2); //vt.end()是在最后一个值后面插入7个2.
vt1.insert(vt1.begin(), vt2.begin(), vt2.end()); //在vt1开头插入vt2。

//获取
vt2.front(); //第一个元素
vt2.back(); //最后一个元素
list<int>::iterator it1 = vt1.begin(); //获取迭代器首地址
list<int>::iterator it2 = vt1.end(); //获取迭代器最后一个元素后面那个迭代器

list<int>::reverse_iterator it3 = vt1.rbegin(); //反向迭代器,现在是指向最后一个元素了。具体用法如下。
for (auto it4 = vt1.rbegin(); it4 != vt1.rend(); it4 ++) //反向遍历数组
cout<<*it4<<" ";
cout<<endl;

//删除
vt2.pop_back(); //删除最后一个
vt2.pop_front(); //删除第一个
vt2.erase(vt2.begin()); //删除这个迭代器所指的元素(后面那个元素)
vt2.erase(vt2.begin(), vt2.begin()); //删除这两个迭代器之间的元素。是[)。
vt1.clear(); //直接清空

//其他
vt2.empty(); //是否为空
vt2.size(); //数组长度
*max_element(vt2.begin(), vt2.end(), compare); //返回最大值。对于自定义类型也还可以使用,最后加一个compare函数。
*min_element(vt2.begin(), vt2.end(), compare); //返回最小值。min_element函数返回的是一个迭代器。'*'这个符号取值。

vt2.sort(compare); //list的排序是这样写的!自定义函数作为参数。
vt2.unique(); //list的unique直接消除 相邻重复 的多余元素。如果要去重要结合排序使用。
vt2.remove(2); //移除所有值为2的元素

find(vt2.begin(), vt2.end(), 2); //查找是否有2。找到了返回迭代器;未找到返回vt2.end()。
*upper_bound(vt2.begin(), vt2.end(), 2); //upper_bound返回一个非递减序列[first, last)中的第一个 大于 值val的迭代器。
*lower_bound(vt2.begin(), vt2.end(), 2); //lower_bound返回一个非递减序列[first, last)中的第一个 大于等于 值val的 迭代器。
reverse(vt2.begin(), vt2.end()); //反转数组
vt2.resize(2); //截取前2个元素

vt1.sort(compare);
vt2.sort(compare);
vt2.merge(vt1, compare); //vt1 merge进 vt2。 vt1变为空。要求是必须先有序,然后按照同一种方式merge。
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: