| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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;
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 |