1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
| #include <stdio.h> #include <iostream> #include <list> #include <algorithm> using namespace std;
template<class T> void printList(string s,const T& mlist){ cout<<s<<'\t'; for(auto a:mlist){ cout<<a<<'\t'; } cout<<endl; }
int main(){ //常见的list的声明方式 list<int> mlist{1,2,3,4}; // 发现不能通过 list<int> mlist1(mlist.begin(),mlist.end()-2);这种方式声明,但是可以通过下面这种方式进行声明。此处存疑 list<int> mlist1(mlist.begin(),--mlist.end()); list<int> mlist2(mlist); list<int> mlist3(5,1); list<int> mlist4 = {1,2,3,4,5}; printList("mlist", mlist); printList("mlist1", mlist1); printList("mlist2", mlist2); printList("mlist3", mlist3); printList("mlist4", mlist4); //front 和back 获得第一个元素和最后一个元素 cout<<"mlist front: "<<mlist.front()<<endl; cout<<"mlist back: "<<mlist.back()<<endl; //遍历通过iterator cout<<"print all elements by iterator: "; list<int>::iterator a = mlist.begin(); for(;a!=mlist.end();a++){ cout<<*a<<'\t'; } cout<<endl; // capacity相关 cout<<"mlist empty "<<mlist.empty()<<endl; cout<<"mlist size() "<<mlist.size()<<endl; cout<<"mlist max_size "<<mlist.max_size()<<endl; // Modifiers相关 //插入操作 mlist.insert(mlist.begin(), 10); // 同样不能通过类似于 mlist.insert(mlist.begin()+2, 10);来插入元素 mlist.emplace(mlist.begin(), 9); printList("insert begin(): ", mlist); //插入到头部 mlist.push_front(10); printList("push_front 10: ", mlist); mlist.emplace_front(9); printList("emplace_front 9: ", mlist); //去除头元素 mlist.pop_front(); printList("pop_front : ", mlist); // 插入到尾部 mlist.push_back(10); printList("push_back 10: ", mlist); mlist.emplace_back(11); printList("emplace_back 11", mlist); // 删除尾部元素 mlist.pop_back(); printList("pop back", mlist); auto a4 = find(mlist.begin(),mlist.end(),4); mlist.erase(a4); printList("after erase a4", mlist); mlist.erase(mlist.begin()); printList("after earse begin()", mlist); // 排序:默认从小到大 mlist.sort(); printList("after sort", mlist); //当然可以改成从大到小 mlist.sort(greater<int>()); printList("after sort big -> small ", mlist); //顺序反转 mlist.reverse(); printList("after reverse ", mlist); //去除重复节点 mlist.unique(); printList("after unique", mlist); //删除list中值为10的节点 mlist.remove(10); printList("after remove 10:", mlist); // 删除list中值大于等于3的节点,这里使用了lamda表达式 mlist.remove_if([](int n){return n>=3;}); printList("after remove >=3 :", mlist); cout<<"before clear the size of list is "<< mlist.size()<<endl; mlist.clear(); cout<<"after clear the size of list is "<< mlist.size()<<endl;
return 0; } /* 运行结果 mlist 1 2 3 4 mlist1 1 2 3 mlist2 1 2 3 4 mlist3 1 1 1 1 1 mlist4 1 2 3 4 5 mlist front: 1 mlist back: 4 print all elements by iterator: 1 2 3 4 mlist empty 0 mlist size() 4 mlist max_size 768614336404564650 insert begin(): 9 10 1 2 3 4 push_front 10: 10 9 10 1 2 3 4 emplace_front 9: 9 10 9 10 1 2 3 4 pop_front : 10 9 10 1 2 3 4 push_back 10: 10 9 10 1 2 3 4 10 emplace_back 11 10 9 10 1 2 3 4 10 11 pop back 10 9 10 1 2 3 4 10 after erase a4 10 9 10 1 2 3 10 after earse begin() 9 10 1 2 3 10 after sort 1 2 3 9 10 10 after sort big -> small 10 10 9 3 2 1 after reverse 1 2 3 9 10 10 after unique 1 2 3 9 10 after remove 10: 1 2 3 9 after remove >=3 : 1 2 before clear the size of list is 2 after clear the size of list is 0 Program ended with exit code: 0 */
|