List的使用
test.cpp
#include <iostream>
#include <list>
#include <vector>
using namespace std;
namespace std
{void test_list1(){//初始化list<int> lt1;//10个5list<int> lt2(10, 5);//自己的迭代器来初始化list<int> lt3(lt2.begin(), lt2.end());//别的迭代器来初始化vector<int> v = { 1, 2, 3, 4, 5 };list<int> lt4(v.begin(), v.end());//遍历--不支持[]因为物理空间不连续list<int>::iterator it4 = lt4.begin();while (it4 != lt4.end()){cout << *it4 << " ";++it4;}cout << endl;for (auto e : lt3){cout << e << " ";}cout << endl;//赋值--10个5变为5个3lt3.assign(5, 3);for (auto e : lt3){cout << e << " ";}cout << endl;}void test_list2(){list<int> lt;//尾插lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);//尾删lt.push_front(10);lt.push_front(20);lt.push_front(30);lt.push_front(40);//尾插尾删很快--底层是带头双向循环的链表for (auto e : lt){cout << e << " ";}cout << endl;//尾删lt.pop_back();lt.pop_back();lt.pop_back();lt.pop_back();lt.pop_front();lt.pop_back();lt.pop_back();lt.pop_back();//lt.pop_back();for (auto e : lt){cout << e << " ";}cout << endl;}void test_list3(){list<int> lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);//因为没有finelist<int>::iterator pos = find(lt.begin(), lt.end(), 2);if (pos != lt.end()){lt.insert(pos, 20);}// 这里pos不会失效--2被改为100cout << *pos << endl;*pos = 100;for (auto e : lt){cout << e << " ";}cout << endl;}void test_list4(){list<int> lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);list<int>::iterator pos = find(lt.begin(), lt.end(), 2);if (pos != lt.end()){lt.erase(pos);}// 这里pos会失效,因为pos指向的节点已经被释放了,出现野指针cout << *pos << endl;*pos = 100;}void test_list5(){list<int> lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);for (auto e : lt){cout << e << " ";}cout << endl;//清掉所有节点除了头结点lt.clear();//有头结点所以还可以继续插入数据lt.push_back(10);lt.push_back(20);lt.push_back(30);for (auto e : lt){cout << e << " ";}cout << endl;list<int> lt1;lt1.push_back(100);lt1.push_back(200);// c++98,两个list的数据交换lt.swap(lt1);swap(lt, lt1);}void test_list6(){list<int> lt;lt.push_back(1);lt.push_back(2);lt.push_back(2);lt.push_back(3);lt.push_back(30);lt.push_back(2);lt.push_back(4);for (auto e : lt){cout << e << " ";}cout << endl;// > 降序 , < 升序//默认升序//it.sort();//降序//有名对象//greater<int> g;//lt.sort(g);//匿名对象lt.sort(greater<int>());for (auto e : lt){cout << e << " ";}cout << endl;// 去重->前提要排序,排序完才能去掉重复的值lt.unique();for (auto e : lt){cout << e << " ";}cout << endl;//删除--有就删,无也可以运行lt.remove(3);lt.remove(5);for (auto e : lt){cout << e << " ";}cout << endl;//逆置lt.reverse();for (auto e : lt){cout << e << " ";}cout << endl;}void TestOP(){srand(time(0));const int N = 100000;list<int> lt;vector<int> v;//先开空间再push_backv.resize(N);for (int i = 0; i < N; ++i){v[i] = rand();lt.push_back(v[i]);}//vector的排序int begin1 = clock();sort(v.begin(), v.end());int end1 = clock();//链表的排序int begin2 = clock();lt.sort();//sort(lt.begin(), lt.end());int end2 = clock();cout << "vector sort" << end1 - begin1 << endl;cout << "list sort" << end2 - begin2 << endl;}
}
int main()
{std::test_list1();return 0;
}
-
1
-
2
-
3
-
4
-
5
-
6
-
tetsOp