#include <algorithm>
#include <list>
template<class T>
void printList(T ptr_begin, T ptr_end)
{
T ptr;
for (ptr = ptr_begin; ptr != ptr_end; ptr++)
{
cout << (*ptr) << " ";
}
cout << endl;
}
bool op_equal(int element)
{
return (element == 5);
}
//赋值篇
list<int> listA;
listA.push_back(1);
listA.push_back(2);
listA.push_back(3);
cout << "ListA1: push_back" << endl;
printList(listA.begin(), listA.end());
listA.assign(3, 4);//assign(n, element)
cout << "ListA2: assign(n, element)" << endl;
printList(listA.begin(), listA.end());
//resize
cout << "resize larger or smaller" << endl;
int A_size = listA.size();
listA.resize(A_size + 2);
A_size = listA.size();
listA.resize(A_size + 2, 10);
printList(listA.begin(), listA.end());
//数组->list
int B[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
list<int> listB(B, B + 8);//构造函数初始化
cout << "ListB: constructor by array" << endl;
printList(listB.begin(), listB.end());
list<int> listC;
listC.assign(B, B + 8);//assign 数组赋值
cout << "ListC:assign by array" << endl;
printList(listC.begin(), listC.end());
list<int> listD;
listD.assign(listB.begin(), listB.end());//assign 迭代器范围
cout << "ListD: assign iterator:" << endl;
printList(listD.begin(), listD.end());
//插入
listD.insert(listD.begin(), 100);//插入单个元素到不同的pos中
listD.insert(listD.begin(), B, B+3);//插入3个元素
listD.insert(listD.end(), 101);
cout << "inset more element:" << endl;
printList(listD.begin(), listD.end());
listD.push_front(102);//在开头插入
cout << "push front at the head:" << endl;
printList(listD.begin(), listD.end());
//删除
listD.pop_front();
cout << "pop front:" << endl;
printList(listD.begin(), listD.end());
listD.remove(1);
cout << "del 1 (value):" << endl;
printList(listD.begin(), listD.end());
//remove_if 根据条件删除
remove_if(listD.begin(), listD.end(), op_equal);
cout << "del 5:" << endl;
printList(listD.begin(), listD.end());
//max_element 找出最大元素
list<int>::iterator ret = max_element(listD.begin(), listD.end());
cout <<"max element:" << *ret << endl;
//list成员函数sort 排序
listD.sort();
cout << "list.sort not sort()" << endl;
printList(listD.begin(), listD.end());
listD.unique();//去掉连续相同的值
cout << "unique: continuous same number:" << endl;
printList(listD.begin(), listD.end());
//归并(merge sort)排序 将两个有序的List 合并到一个List
cout << "listD (merge sort) list D into listD:" << endl;
listD.merge(listC);//将listD和listC合并到listD中 listC删除了
printList(listD.begin(), listD.end());
listD.reverse();//反转
cout << "reverse:" << endl;
printList(listD.begin(), listD.end());
//打印开头和结果
cout << listD.front() << endl;
cout << (*listD.begin()) << endl;
cout << listD.back() << endl;
//注意反向迭代器 reverse_iterator, not iterator
cout << "reverse print:" << endl;
for (list<int>::reverse_iterator ptr = listD.rbegin(); ptr != listD.rend(); ptr++)
{
cout << (*ptr) << " ";
}
cout << endl;
//find
list<int>::iterator find8 = find(listD.begin(), listD.end(), 8);
listD.erase(find8);
//list.erase(pos) list.erase(begin(), end())
cout << "erase elements (pos):" << endl;
printList(listD.begin(), listD.end());
list<int>::iterator find1 = find(listD.begin(), listD.end(), 1);
list<int>::iterator find100 = find(listD.begin(), listD.end(), 100);
list<int>::iterator find4 = find(listA.begin(), listA.end(), 4);
//两个list拼接,用insert就可以了
//splice也可以
listD.sort();
listD.unique();
listA.sort();
listA.unique();
cout << "before splice:" << endl;
printList(listA.begin(), listA.end());
printList(listD.begin(), listD.end());
listA.splice(find4, listD, find1, find100);// 将[3~100)为范围拼接到 listA中find8后面
cout << "after splice:" << endl;
printList(listA.begin(), listA.end());//不包含100, 插入到find4的位置