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;}


原创粉丝点击