心胸决定格局,眼界决定境界...

STL list

#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的位置

  

posted @ 2019-02-13 16:11  WELEN  阅读(102)  评论(0)    收藏  举报