/************************** list容器的初始化方法 ******************************/
//list<int> myList; 创建空链表
//list<int> myList(5); 创建5个元素的list,每个元素的值由默认构造函数构成
//list<int> myList(5,2); 创建5个元素的list,每个元素的初始值为2
//list<int> myList1(myList); 通过已有链表构造新链表(拷贝构造)
int arr[10] = {1,2,3,4,5};
list<int> myList(arr,arr+5); //由[start, end)区间内的值初始化
list<int> myList2(myList.begin(),myList.end()); //由迭代器创建list,迭代区间为[begin,end]
/************************** list容器的大小 ******************************************/
// 1. int size() const: 返回容器元素个数
int size = myList.size();
// 2. bool empty() const: 判断容器是否为空,若为空则返回true
bool bEmpty = myList.empty();
// 3. size_type max_size() const noexcept; 返回该容器可以容纳元素个数的大小.
unsigned int max_size = myList.max_size();
/************************** list容器元素的插入 ******************************************/
// 1. void push_back(const T& x): list元素尾部增加一个元素x
myList.push_back(6);
// 2. void push_front(const T& x): list元素首元素前添加一个元素x
myList.push_front(0);
// 3. iterator insert(iterator it, const T& x ): 在迭代器指针it前插入元素x,返回x迭代器指针
list<int>::iterator it = myList.begin();
myList.insert(it,-1);
// 4. void insert(iterator it,size_type n,const T& x): 迭代器指针it前插入n个相同元素x
myList.insert(it,3,-2);
// 5. void insert(iterator it,const_iterator first,const_iterator last): 把[first,last)间的元素插入迭代器指针it
myList.insert(it,myList2.begin(),myList2.end());
/************************** list容器元素的删除 ******************************************/
// 1. void pop_back():删除容器尾元素,当且仅当容器不为空
myList.pop_back();
// 2. void pop_front():删除容器首元素,当且仅当容器不为空
myList.pop_front();
// 3. void remove(const T& x):删除容器中所有元素值等于x的元素
myList.remove(2);
// 4. void clear():删除容器中的所有元素
myList2.clear();
// 5. iterator erase(iterator it):删除迭代器指针it对应的元素
myList.erase(myList.begin());
// 6. iterator erase(iterator first,iterator last):删除迭代器指针[first,last)间的元素
myList.erase(myList.begin(),myList.end());
/**************************** list容器的操作 *******************************************/
int arr1[10] = {6,7,8,9,10};
list<int> youList(arr1,arr1+5); //由[start, end)区间内的值初始化
//1. c1.swap(c2); 将c1和c2交换。
myList.swap(youList);
//2. c1.merge(c2) 合并2个有序的链表并使之有序,从新放到c1里,释放c2
myList.merge(youList);
//3. c1.merge(c2,comp) 合并2个有序的链表并使之按照自定义规则排序之后从新放到c1中,释放c2。
//4. splice(c1.beg,c2,c2.beg) 将c2的beg位置的元素连接到c1的beg位置,并且在c2中施放掉beg位置的元素
//5. unique() 删除相邻的相同元素(去掉连续的重复值)
myList.unique();
//6. sort() 将链表排序,默认升序
myList.sort();
/**************************** list容器的遍历 *******************************************/
/********** 正向遍历 **********/
//iterator begin(): 返回首元素的迭代器指针
//iterator end(): 返回尾元素之后位置的迭代器指针
for(list<int>::iterator it =myList.begin();it!=myList.end();++it)
{
cout<<*it<<"-->";
}
cout<<"over"<<endl;
/********** 逆向遍历 **********/
//reverse_iterator rbegin(): 返回尾元素的逆向迭代器指针,用于逆向遍历容器
//reverse_iterator rend(): 返回首元素前一个位置的迭代器指针
for(list<int>::reverse_iterator it =myList.rbegin();it!=myList.rend();++it)
{
cout<<*it<<"-->";
}
cout<<"over"<<endl;
/**********************************/
//reference front(): 返回首元素的引用
//reference back(): 返回尾元素的引用
int& i = myList.front();
int& j = myList.back();
i = 20;
j = 30;
for(list<int>::iterator it =myList.begin();it!=myList.end();++it)
{
cout<<*it<<"-->";
}
cout<<"over"<<endl;