深入学习STL系列(3)-- list

Ø  list

    list是一种双向链表,不同于vector的连续内存存储,它在内存中以节点的形式存在,每个节点都存着指向上下节点的指针。下面我们将以存储int型元素的list为例,仔细讲解如何使用list。

---创建list---

list<int> il;            //方式1,构建一个空的容器对象

list <int> ivl(2, 9);  //方式2,构建一个包含2个值为9的容器对象

int a[4] = { 1, 2, 3, 4 };

list <int> il(a, a+3);       //方式3,利用数组指针构建容器对象(也可以利用其它容器迭代器)

list <int> il2(il);            //方式4,利用其它vector对象构建容器对象

list <int> il3 = il;          //方式4的另一种写法


---插入操作---

il.push_front(2);                 //方式1,在队首插入一个元素

il.push_back(2);                 //方式2,在队尾插入一个元素

il.insert(il.begin(),5);          //方式3,在指定位置插入1个元素

il.insert(il.begin()+1,3, 9);    //方式4,在指定位置插入多个元素

il.emplace(il.begin(),1);       //方式5,在指定位置插入1个元素(比insert效率高)

il.emplace_front(1);             //方式6,在队首插入1个元素

il.emplace_back(1);             //方式7,在队尾插入1个元素


---删除操作---

il.erase(il.begin());                           //方式1,删除指定位置的1个元素

il.erase(il.begin(),il.begin() + 2);       //方式2,删除指定位置的多个元素

il.pop_front();                                //方式3,删除队首元素

il.pop_back();                                 //方式4,删除队尾元素

il.remove(val);                                 //方式5删除所有值为val的元素

il.remove_if(_Pred);                         //方式6,删除所有满足_Pred的元素

il.unique();                                      //方式7,删除连续重复元素,比如1-2-2-1,处理后变为1-2-1

il.clear();                                        //方式8,清空所有元素


---查看操作---

il.front();     //方式1,查看头部的元素

il.back();     //方式2,查看尾部的元素

*il.begin();  //方式3,使用迭代器查看元素

### list容器不支持随机访问!###


---遍历操作---

//从前往后遍历

for(vector<int>::iteratoriter = il.begin(); iter++; iter!= il.end()){

     //dosomething

}

//从后往前遍历

for(vector<int>::iteratoriter = il.rbegin(); iter++; iter!= il.rend()){

     //dosomething

}

//利用for_each进行遍历

for_each(iter.begin(),iter.end(), dosomething);


---其它操作---

il.empty();              //判断容器是否为空

il.assign(5,2);          //清空所有元素,并插入5个值为2的元素

il.assign(iter1,iter2);//清空所有元素,通过迭代器或数组指针插入数据

il.merge(il2);           //合并il2,并且按照增序排列,list2将被清空

il.splice(il.begin(),il2);//合并il2,il2将被清空


---注意事项---

    与vector支持随机访问不同,list不支持随机访问,因为list是一种不连续内存容器。每次插入一个节点,就动态分配一个节点的空间;每次删除一个节点,就动态释放该节点的空间。

    同样,由于list不会发生像vector一样的内存重新分配、搬移,所以插入和删除节点不会是之前的迭代器失效。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值