list容器:链表容器,不支持随机遍历。不能用通用的sort算法(要有随机访问迭代器),容器自己有排序算法
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<list> #include<algorithm> #include<vector> using namespace std; void printList(const list<int> &mylist){ for (list<int>::const_iterator it = mylist.begin(); it != mylist.end(); ++it){ cout << *it << " "; } cout << endl; } //1. list构造函数 /* list<T> lstT;//list采用采用模板类实现,对象的默认构造形式: list(beg,end);//构造函数将[beg, end)区间中的元素拷贝给本身。 list(n,elem);//构造函数将n个elem拷贝给本身。 list(const list &lst);//拷贝构造函数。 */ void test01(){ //list迭代器是双向迭代器, list<int> mylist(10, 1); list<int> mylist2(mylist.begin(), mylist.end()); printList(mylist); list<int>::iterator it; //sort(mylist.begin(), mylist.end()); //sort算法不能对list容器排序 mylist.sort(); } //2. list数据元素插入和删除操作 /* push_back(elem);//在容器尾部加入一个元素 pop_back();//删除容器中最后一个元素 push_front(elem);//在容器开头插入一个元素 pop_front();//从容器开头移除第一个元素 insert(pos,elem);//在pos位置插elem元素的拷贝,返回新数据的位置。 insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。 insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。 clear();//移除容器的所有数据 erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。 erase(pos);//删除pos位置的数据,返回下一个数据的位置。 remove(elem);//删除容器中所有与elem值匹配的元素。 */ bool mycompare(int val){ return val > 50; } void test02(){ list<int> mylist; mylist.push_back(10); mylist.push_back(20); mylist.push_back(30); mylist.push_back(40); mylist.push_back(50); mylist.push_front(100); mylist.push_front(200); mylist.push_front(300); mylist.push_front(400); vector<int> v; v.push_back(1000); v.push_back(2000); mylist.insert(++mylist.begin(), v.begin(), v.end()); printList(mylist); mylist.push_back(300); mylist.push_back(300); printList(mylist); //mylist.remove(300); mylist.remove_if(mycompare); printList(mylist); } //3. list赋值操作 list数据的存取 /* assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。 assign(n, elem);//将n个elem拷贝赋值给本身。 list& operator=(const list &lst);//重载等号操作符 swap(lst);//将lst与本身的元素互换。 front();//返回第一个元素。 back();//返回最后一个元素。 */ void test03(){ list<int> mylist; mylist.assign(10,10); printList(mylist); cout << mylist.front() << endl; cout << mylist.back() << endl; } //4. list反转排序 /* reverse();//反转链表,比如lst包含1,3,5元素,运行此方法后,lst就包含5,3,1元素。 sort(); //list排序 */ bool canbucanswap(int v1,int v2){ return v1 > v2; } void test04(){ list<int> mylist; mylist.push_back(10); mylist.push_back(40); mylist.push_back(30); mylist.push_back(50); mylist.push_back(20); printList(mylist); mylist.reverse(); printList(mylist); //排序 mylist.sort(canbucanswap); printList(mylist); } //list容器迭代器类型要清楚,还要直到list容器是自己提供排序算法,通用的sort算法不能对list排序 int main(){ //test01(); //test02(); //test03(); test04(); system("pause"); return EXIT_SUCCESS; }