STL list 是一个双向链表,迭代器具备前移和后移的能力。list 有一个重要的性质:插入操作和结合操作会造成原有的迭代器失效。应用时应该用<list>
- 以下为list 的特有操作
(1)Void push_front(const T &x); //插入一个结点,作为头结点
(2)Void push_back(const T &x); //插入一个结点,作为尾结点
(3)Void pop_front(); //移除头结点
(4)Void pop_back(); //移除尾结点
(5)Void remove(const T&value); //将数值为value的所有元素移除
(6)Void unique(); //将“连续而相同的元素”移除只剩一个
(7)Void splice(iterator position, list &x); //将x 结合于position所指位置之前。X 必须不同于*this
(8)Void splice(iterator position, list&, iterator i); //将i所指的元素结合于position所指位置之前。Position 和 i 可指向同一个list
(9)Void splice(iterator position, list&, iterator first, iterator lsat); //将[first, last)内的所有元素结合于 position 所指的位置之前,position和[first, last)可指向同一个list,但是position 不能位于[first, last)之内。
(10)void merge(list& x); //将x合并到*this 身上。两个lists 的内容都必须先经过递增排序。
(11)void reverse(); //将*this 的内容逆向重置
(12)void sort(); //将list 的元素进行升序排序
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
void Show(int nVal)
{
cout << nVal << " ";
}
int main()
{
list<int> lst;
lst.push_back(1);
lst.push_back(1);
lst.push_back(1);
lst.push_back(4);
lst.push_back(4);
lst.push_back(2);
lst.push_back(2);
lst.push_back(2);
lst.push_back(2);
lst.push_back(3);
lst.push_back(3);
lst.push_back(3);
::for_each(lst.begin(),lst.end(),&Show);
cout << endl;
//lst.remove(1); // 删除所有的 1
lst.unique(); // 删除连续相同的
::for_each(lst.begin(),lst.end(),&Show);
cout << endl;
list<int> lst1;
lst1.push_back(3);
lst1.push_back(7);
lst1.push_back(0);
lst1.push_back(5);
lst1.push_back(4);
lst1.push_back(6);
lst1.push_back(2);
::for_each(lst1.begin(),lst1.end(),&Show);
cout << endl;
list<int>::iterator itePos = ::find(lst.begin(),lst.end(),2);
list<int>::iterator iteFirst = ::find(lst1.begin(),lst1.end(),7);
list<int>::iterator iteLast = ::find(lst1.begin(),lst1.end(),6);
//lst.splice(itePos,lst1); // 在 lst 这个链表的 itePos位置 插入 lst1 整个链表
//lst.splice(itePos,lst1,iteFirst); // 在 lst 这个链表的 itePos位置 插入 lst1 这个链表中的 iteFirst 这一个元素
//lst.splice(itePos,lst1,iteFirst,iteLast);// 在 lst 这个链表的 itePos位置 插入 lst1 这个链表中的 从iteFirst到iteLast 这一段
lst.sort(); // 排序
lst1.sort();
lst.merge(lst1); // 两个有序的链表合并
lst.reverse(); // 翻转
::for_each(lst.begin(),lst.end(),&Show);
cout << endl;
::for_each(lst1.begin(),lst1.end(),&Show);
cout << endl;
lst.front() = 200;
lst.back() = 100;
::for_each(lst.begin(),lst.end(),&Show);
cout << endl;
::for_each(lst1.begin(),lst1.end(),&Show);
cout << endl;
system("pause");
return 0;
}