#include <iostream> #include <list> using namespace std; //链表 list //链表 list特性: //链表是由一系列的结点组成,借点包含两个域,一个数据域,一个指针域。 //链表容器有迭代器件,但是不支持随机访问,算法sort 只支持可以随机访问的容器 //链表内存是连续的还是非连续的 //1.非连续,添加和删除元素,时间复杂度都是常数项,不需要移动元素,比数组添加删除效率高 //2.链表只有在需要的时候才分配内存 链表,只要拿到第一个结点,相当与拿到整个链表 链表中最后一个结点的指针域为空 //3.链表需要额外的空间保存借点关系 //list 常用API void printlsit(list<int> &l) { for(list<int>::iterator itt=l.begin();itt!=l.end();itt++) { cout<<*itt<<" "; } cout<<endl; } //初始化 void test1() { list<int> l1; //无参构造 list<int> l2(10,4); //有参构造 list<int> l3(l2); //拷贝构造 list<int> l4(l2.begin(),l2.end()); for (list<int>::iterator it=l4.begin();it!=l4.end();it++) { cout<<*it<<endl; } } //list 数据插入和删除 push_back(elem) pop_back() push_front(elem) pop_front() insert(pos,elem) //insert(pos,n,elem) insert(pos,begin,end),clear(),erase(begin,end),earse(pos),remove(elem) void test2() { list<int> l1; l1.push_back(10); l1.push_front(20); l1.insert(l1.begin(),30);//等价于l1.push_front(30) l1.insert(l1.end(),40);//等价与l1.push_back(40) printlsit(l1); cout<<"-------------------"<<endl; list<int>::iterator it=l1.begin(); it++; //不能直接加指定值,如it+5; list 链表不能随机访问 it++; l1.insert(it,20); printlsit(l1); l1.remove(20);//删除容器中所有的20 } //赋值,反转reverse() //list容器特有的成员函数 sort() bool mycompare(int v1, int v2) { return v1>v2; } void test3() { list<int> l1; l1.push_back(11); l1.push_back(22); l1.push_back(33); l1.push_back(16); printlsit(l1); l1.sort(); //list中的成员函数sort默认从小到大排序 printlsit(l1); cout<<"-------------"<<endl; l1.sort(mycompare);//加入自定义的排序方式 printlsit(l1); //注意 算法sort 只能支持可以随机访问的容器 } int main() { //test1(); //test2(); test3(); return 0; }
c++ 中的list容器教程
最新推荐文章于 2024-06-03 09:14:44 发布