list容器
1、简介:
(1)双向链表实现;
(2)不可进行随机访问;不支持下标运算和at函数;
(3)插入和删除操作在任何位置都很快;因为不需要移动元素,只需要修改指针;
(4)插入删除元素不会使引用、指针和迭代器失效;
(5)对于异常的支持,操作要么成功,要么无效;
(6)不提供容量和重新分配相关的操作,因为不需要;
(7)提供了很多特殊的成员函数来移动元素;
2、创建拷贝和销毁:

1 void test01() 2 { 3 list<int> L1; 4 showList(L1); 5 list<int> L2(L1); 6 showList(L2); 7 list<int> L3(4); 8 showList(L3); 9 list<int> L4(5, 12); 10 showList(L4); 11 list<int> L5(L4.begin(), L4.end()); 12 showList(L5); 13 }
结果:

3、无修改操作:

1 void test02(void) 2 { 3 list<int> L1; 4 list<int> L2; 5 L1.push_back(10); 6 L1.push_back(20); 7 L1.push_back(30); 8 L2.push_back(10); 9 L2.push_back(20); 10 L2.push_back(30); 11 L2.push_back(40); 12 cout << L1.size() << endl; 13 cout << L1.empty() << endl; 14 cout << L1.max_size() << endl; 15 cout << (L1 == L2) << endl; 16 cout << (L1 != L2) << endl; 17 cout << (L1 > L2) << endl; 18 cout << (L1 < L2) << endl; 19 cout << (L1 <= L2) << endl; 20 cout << (L1 >= L2) << endl; 21 }
结果:

4、赋值操作:

1 void test03() 2 { 3 list<int> L1; 4 list<int> L2(L1); 5 showList(L1); 6 showList(L2); 7 L1.assign(10, 4); 8 showList(L1); 9 L2.assign(L1.begin(), L1.end()); 10 showList(L2); 11 L1.push_back(34); 12 showList(L1); 13 L1.swap(L2); 14 showList(L1); 15 showList(L2); 16 swap(L1, L2); 17 showList(L1); 18 showList(L2); 19 }
结果:

5、元素访问:

1 void test04() 2 { 3 list<int> L1; 4 L1.push_back(10); 5 L1.push_back(20); 6 showList(L1); 7 cout << L1.front() << endl; 8 cout << L1.back() << endl; 9 }
结果:

6、迭代器:

1 void test05() 2 { 3 list<int> L1; 4 L1.push_back(10); 5 L1.push_back(20); 6 L1.push_back(30); 7 L1.push_back(40); 8 L1.push_back(50); 9 showList(L1); 10 for (list<int>::iterator it = L1.begin(); it != L1.end(); it++) 11 { 12 cout << (*it) << " "; 13 } 14 cout << endl; 15 16 for (list<int>::reverse_iterator it = L1.rbegin(); it != L1.rend(); it++) 17 { 18 cout << (*it) << " "; 19 } 20 cout << endl; 21 }
结果:

7、插入和删除:


1 void test06() 2 { 3 list<int> L1; 4 L1.push_back(10); 5 L1.push_back(20); 6 L1.push_back(30); 7 L1.push_back(40); 8 L1.push_back(50); 9 showList(L1); 10 L1.insert(L1.begin(), 34); 11 showList(L1); 12 L1.insert(++L1.begin(), 3, 55); 13 showList(L1); 14 list<int> L2; 15 L2.push_back(1); 16 L2.push_back(2); 17 L2.push_back(3); 18 L1.insert(L1.begin(), L2.begin(), L2.end()); 19 showList(L1); 20 L1.push_back(12); 21 showList(L1); 22 L1.pop_back(); 23 showList(L1); 24 L1.push_front(22); 25 showList(L1); 26 L1.pop_front(); 27 showList(L1); 28 L1.remove(55); 29 showList(L1); 30 L1.erase(L1.begin()); 31 showList(L1); 32 L1.erase(L1.begin(), ++L1.begin()); 33 showList(L1); 34 cout << L1.size() << endl; 35 L1.resize(3); 36 cout << L1.size() << endl; 37 showList(L1); 38 L1.resize(10, 222); 39 showList(L1); 40 L1.clear(); 41 cout << L1.size() << endl; 42 showList(L1); 43 }
结果:

8、拼接功能:

1 bool myCompare(int a, int b) 2 { 3 return a > b; 4 } 5 6 void test07() 7 { 8 list<int> L1; 9 L1.push_back(1); 10 L1.push_back(2); 11 L1.push_back(2); 12 L1.push_back(3); 13 L1.push_back(3); 14 L1.push_back(4); 15 L1.push_back(5); 16 L1.push_back(6); 17 showList(L1); 18 L1.unique(); 19 showList(L1); 20 list<int> L2; 21 L2.push_back(11); 22 L2.push_back(12); 23 L2.push_back(13); 24 L1.splice(L1.begin(), L2); 25 showList(L1); 26 showList(L2); 27 list<int> L3; 28 L3.push_back(34); 29 L3.push_back(35); 30 L3.push_back(36); 31 L1.splice(++L1.begin(), L3, ++L3.begin(), --L3.end()); 32 showList(L1); 33 showList(L3); 34 L1.sort(); 35 showList(L1); 36 L1.sort(myCompare); 37 showList(L1); 38 list<int> L4; 39 L4.push_back(1); 40 L4.push_back(2); 41 L4.push_back(3); 42 L4.push_back(4); 43 L4.push_back(5); 44 list<int> L5; 45 L5.push_back(4); 46 L5.push_back(5); 47 L5.push_back(6); 48 L5.push_back(7); 49 showList(L4); 50 showList(L5); 51 L4.merge(L5); 52 showList(L4); 53 showList(L5); 54 L4.reverse(); 55 showList(L4); 56 57 }
结果:


浙公网安备 33010602011771号