#include<iostream>
using namespace std;
#include<list>
#include<algorithm>
int main()
{
int i;
list<int> ilist;
cout << "size=" << ilist.size() << endl; //size=0
ilist.push_back(0);
ilist.push_back(1);
ilist.push_back(2);
ilist.push_back(3);
ilist.push_back(4);
cout << "size=" << ilist.size() << endl; //size=5
list<int>::iterator ite;
for (ite = ilist.begin(); ite != ilist.end(); ite++)
cout << *ite << " "; //0 1 2 3 4
cout << endl;
ite = find(ilist.begin(), ilist.end(), 3); //查找3的位置
if (ite != ilist.end())
ilist.insert(ite, 99); //在3的位置插入99,接下来3之后的数据向后挪
cout << "size=" << ilist.size() << endl;
cout << *ite << endl;
cout << endl;
ite = find(ilist.begin(), ilist.end(), 1); //查找1
if (ite != ilist.end())
cout << *(ilist.erase(ite)) << endl; //删除1,返回指向2的指针
for (ite = ilist.begin(); ite != ilist.end(); ++ite)
cout << *ite << " ";
cout << endl;
cout << "----------" << endl;
int iv[5] = { 5, 6, 7, 8, 9 };
list<int> ilist2(iv, iv + 5);
ite = find(ilist.begin(), ilist.end(), 99); //查找99的位置
ilist.splice(ite, ilist2); //在99位置插入ilist2-->变成0 2 5 6 7 8 9 99 3 4
ilist.reverse(); //逆置 将ilist整个逆置过来
ilist.sort(); //从小到大进行排序
for (ite = ilist.begin(); ite != ilist.end(); ++ite)
cout << *ite << " ";
cout << endl;
system("pause");
return 0;
}
Unique分析:
template<class T,class Alloc>
void list<T, Alloc>::unique()
{
iterator first = begin(); //first指向开始
iterator last = end(); //last指向结尾
if (first == last) //循环链表,如果相等就为空
return;
iterator next = first; //next同样指向起始位置
while (++next != last) //1.先++next,指向下一个位置
{
if (*first == *next) //2.如果相等就删除,next同样还会指向first
erase(next);
else
{//如果不等,那么first=next,会使first指向下一个位置,因为next在之前++,已经指向下一个位置。
first = next;
}
//不管两个值是否相同,两个同时指向同一个数据,下一次继续先++next
next = first;
}
}