链表是由一系列的结点组成,结点包括两个域:一个数据域,一个指针域
1、链表内存是非连续的,添加删除元素效率较高,时间复杂度都是常数项,不需要移动元素
2、链表只有在需要的时候才会分配内存
3、链表只要拿到第一个结点,相当于拿到整个链表。最后一个结点指向为空
4、链表需要额外的空间保存结点关系。前驱 后继关系
#include<iostream>
#include<list>
using namespace std;
void PrintList(list<int> mlist4)
{for (list<int>::iterator it = mlist4.begin(); it != mlist4.end(); it++) {cout << *it << " ";}cout << endl;
}
//初始化
void test01() {list<int> mlist1;list<int> mlist2(10, 2);list<int> mlist3(mlist2);list<int> mlist4(mlist2.begin(),mlist2.end());for (list<int>::iterator it = mlist4.begin(); it != mlist4.end(); it++) {cout << *it << " ";}cout << endl;
}//插入和删除
void test02() {list<int> mlist;mlist.push_back(100);mlist.push_front(200);mlist.insert(mlist.begin(), 300);mlist.insert(mlist.end(), 400);list<int>::iterator it = mlist.begin();it++;it++;mlist.insert(it, 500); //insert的第一个参数为迭代器cout << "-------------插入------------" << endl;PrintList(mlist);//删除mlist.pop_back();mlist.pop_front();cout << "-------------pop_back&&pop_front删除------------" << endl;PrintList(mlist);cout << "-------------erase第三个数删除------------" << endl;mlist.erase(it);PrintList(mlist);cout << "-------------remove100删除------------" << endl;mlist.push_back(100);mlist.push_front(100);PrintList(mlist);mlist.remove(100); //delete all the number which the value 100PrintList(mlist);mlist.erase(mlist.begin(), mlist.end()); //equal to mlist.clear()PrintList(mlist);
}//大小,赋值操作
void test03() {list<int> mlist1,mlist3;mlist1.assign(10, 1);mlist3.assign(10, 3);list<int> mlist2;mlist2 = mlist1;mlist1.swap(mlist3);
}//排序 反转
void test04() {list<int> mlist;for (int i = 0; i < 10; i++){mlist.push_back(i);}PrintList(mlist);cout << "反转" << endl;mlist.reverse();PrintList(mlist);
}
bool myCompare05(int v1,int v2) {return v1 > v2;
}
//排序
void test05() {list<int> mlist;mlist.push_back(200);mlist.push_back(23);mlist.push_back(90);mlist.push_back(3434);PrintList(mlist);cout << "sort" << endl;mlist.sort(); //默认从小到大PrintList(mlist);//从大到小mlist.sort(myCompare05);PrintList(mlist);
}//算法sort 支持可随机访问的容器int main(int) {cout << "------------test01-------------" << endl;test01();cout << "------------test02-------------" << endl;test02();cout << "------------test03-------------" << endl;test03();cout << "------------test04-------------" << endl;test04();cout << "------------test05-------------" << endl;test05();return 0;
}