|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 moc 于 2018-9-19 20:24 编辑
1、list简介
list是一个双向链表容器,可以高效的进行插入和删除元素。
list不可以随机存取元素,所以不支持at(pos)和[]操作。其迭代器只能++,不能+n.
list的结点是从0开始的,删除元素[0, 3)左闭右开。
2、list操作
1. 构造函数
- list<int>a{1,2,3}
- list<int>a(n) //声明一个n个元素的列表,每个元素都是0
- list<int>a(n, m) //声明一个n个元素的列表,每个元素都是m
- list<int>a(first, last) //声明一个列表,其元素的初始值来源于由区间所指定的序列中的元素,first和last是迭代器
复制代码
2.基本操作
push_back() 尾部插入元素
push_front() 头部插入元素
pop_back() 删除尾部一个元素
pop_front() 删除头部一个元素
front() 获取头部一个元素
back() 获取尾部一个元素
swap() 交换两个链表,a.swap(b)和swap(a, b)都可以。
reverse() 逆置链表中的元素
begin() 获取指向头部的迭代器
end() 获取指向尾部后面的迭代器
clear() 清空链表的所有元素
empty() 判断链表是否为空
size() 获取容器中元素的个数
remove(a) 删除容器中所有值为a的元素
erase(pos) 删除pos(迭代器)位置的数据,返回下一个数据的位置
erase(beg,end) 删除[beg,end)区间的数据,返回下一个数据的位置
insert(pos,elem) 在pos位置插elem元素的拷贝,返回新数据的位置
insert(pos,n,elem) 在pos位置插入n个elem数据,无返回值
insert(pos,beg,end) 在pos位置插入[beg,end)区间的数据,无返回值
assign() (1)a.assign(n, val):将a中的所有元素替换成n个val元素 list<int>b{1,2,3,4,5}; b.assign(5,10); ==》b中的元素变为10, 10, 10, 10, 10
(2)a.assign(b.begin(), b.end())
list<int>a{6,7,8,9};
list<int>b{1,2,3,4,5};
b.assign(a.begin(),a.end());
b中的元素变为6,7,8,9。
resize()
list<int>b{1, 2, 3, 4};
b.resize(2);
list中输出元素:1,2
list<int>b{1, 2, 3, 4};
b.resize(6);
list中输出元素:1,2,3,4,0,0
list<int>b{1, 2, 3, 4};
b.resize(6,9);
list中输出元素:1,2,3,4,9,9
remove_if()
(1)括号中可以传入回调函数
回调函数的原型为bool isRemove(T &obj1);
函数名任意,如果obj1需要被移除则返回1,否则返回0
使用方法:list.remove_if(isRemove)
这种方法最简单,但是无法向回调函数中传递参数,每一个条件就要有一个回调函数,因此不推荐使用。
- bool is_odd(constint& value){
- return (value==4);
- }
-
- int main(){
- list<int> a{6,7,4,9,7,10};
- a.remove_if(is_odd);
-
- list<int>::iterator it = a.begin();
- while(it != a.end()){
- cout<<*it<< " ";
- it++;
- }
- return 0;
- }
复制代码
(2)创建用于比较的类,传入类名及初始化参数
用于比较的类必须重载bool operator()(T &obj1)方法,如果obj1需要被移除则返回1,否则返回0.
用于比较的类还应当包含必要的构造函数,用于传递参数。
使用方法:list.remove_if(classname(args))
- class single_digit{
- public:
- bool operator()(const int& value){
- return (value<10);
- }
- };
- int main(){
- list<int> a{6,7,4,9,7,10};
- a.remove_if(single_digit());
-
- list<int>::iterator it = a.begin();
- while(it != a.end()){
- cout<<*it<<" ";
- it++;
- }
- return 0;
- }
复制代码
|
|