C++中模板类list常用示例
来源:互联网 发布:qq关系数据库 编辑:程序博客网 时间:2024/06/07 00:06
list是STL提供的一个线性链表的数据结构,其与vector的差异,类似于链表与数组的差异。
数组:可以随机读取访问,但是要插入和删除指定元素时不容易处理,因为在扩展或缩小数组空间时,对应的其他数组元素的位置会受到影响。
链表:不能够随机读取访问,但是插入和删除元素时较数组要方便很多,以双向线性链表为例,每个节点都通过前驱指针和后驱指针与前后元素保持访问关系,插入和删除元素时只涉及到最多三个元素的属性修改(即前、后、待插入删除的三个元素),不会对其他所有的元素产生影响。
使用示例如下:
#include <iostream>#include <list>#include <string>#include <vector>#include <algorithm>using namespace std;int main(){list<string> strList;strList.push_back("nihao");strList.push_back("dajiahao");// 与vector相比较,这里多添加了push_front成员接口 strList.push_front("beijing");strList.push_front("shanghai");// 遍历list容器中的所有元素for (list<string>::iterator iterStrList = strList.begin(); iterStrList != strList.end(); iterStrList++){cout << *iterStrList << endl;}// 向list容器中插入指定元素, 需要使用指定的迭代器来指明插入位置,然后将在该迭代器指向的元素之前进行插入strList.insert(strList.begin(), "guangzhou");strList.insert(++strList.begin(), "shenzhen");for (list<string>::iterator iterStrList = strList.begin(); iterStrList != strList.end(); iterStrList++){cout << *iterStrList << endl;}// 使用remove()从list容器中删除元素strList.remove("nihao");for (list<string>::iterator iterStrList = strList.begin(); iterStrList != strList.end(); iterStrList++){cout << *iterStrList << endl;}// 使用erase()从listlist<string>::iterator iterDel;for (list<string>::iterator iterStrList = strList.begin(); iterStrList != strList.end(); iterStrList++){if (*iterStrList == "guangzhou"){iterDel = iterStrList;}}strList.erase(iterDel);for (list<string>::iterator iterStrList = strList.begin(); iterStrList != strList.end(); iterStrList++){cout << *iterStrList << endl;}// 注:对于list而言使用remove成员函数和erase成员函数都可以释放指定节点,// 但是对于vector而言,如果使用algorithm中的remove函数,则其与自身erase成员函数存在明显不同,使用remove只是将不等于指定val的元素前移,但不会真正删除,需要与erase配合使用vector<int> numTest;numTest.push_back(1);numTest.push_back(2);numTest.push_back(3);numTest.push_back(2);numTest.push_back(1);vector<int>::iterator iterNumTest;// 这种指定迭代器区间的,一般是前闭后开,即从begin到end的前一个元素iterNumTest = remove(numTest.begin(), numTest.end(), 2);for (vector<int>::iterator iterNum= numTest.begin(); iterNum != numTest.end(); iterNum++){cout << *iterNum << endl;}numTest.erase(iterNumTest, numTest.end());for (vector<int>::iterator iterNum = numTest.begin(); iterNum != numTest.end(); iterNum++){cout << *iterNum << endl;}// 同样可以使用find函数来查找容器中指定的元素,常用的algorithm中函数有sort(排序),unique(去重),find(查找)等system("pause");return 0;}
阅读全文
0 0
- C++中模板类list常用示例
- C++中模板类vector常用示例
- C++中模板类map常用示例
- C++中模板类map常用示例
- STL库中简单的list类模板示例和一个小的延时程序
- C++List模板类的使用
- c++STL中常用模板常用函数记录
- 类模板模拟实现STL中List
- c++::用模板实现List
- C++中标准类string常用示例
- c#中list使用示例
- 模板类list中merge、remove中_Pred参数说明
- 几个标准模板库常用功能示例
- 模板类简单示例
- C++模板类示例
- c++类模板示例
- c++中类模板(class template)简单示例
- List--C++模板类
- asp基础2012
- 1007. 素数对猜想 (20)
- 如何给自己开发的产品定位
- 经典SQL语句大全(技巧篇)
- mysql
- C++中模板类list常用示例
- BAT批处理中choice的使用示例
- 中国大学慕课C语言第八讲笔记
- 安装测试 facebook FAISS(GPU)
- 2017.5.31
- 经典SQL语句大全(提升篇)
- 【LeetCode】600. Non-negative Integers without Consecutive Ones
- MapReduce实例----数据去重
- iOS ijkplayer Audio Unit 播放音频