【STL】list常用函数的例子
void test_list_assign(){std::list<int> c1;std::list<int> c2;c1.push_back(10);c1.push_back(20);c1.push_back(30);c1.push_back(40);c1.push_back(50);c2.push_back(60);c2.push_back(70);c2.push_back(80);c2.push_back(90);std::cout << "c1 = ";std::copy(c1.begin(), c1.end(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;std::cout << "c2 = ";std::copy(c2.begin(), c2.end(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl; c1.assign(++c2.begin(), c2.end());std::cout << "c1 = ";std::copy(c1.begin(), c1.end(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;c1.assign(2, 99);std::cout << "c1 = ";std::copy(c1.begin(), c1.end(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;}void test_list_merge(){std::list <int> c1, c2, c3;c1.push_back(3);c1.push_back(6);c2.push_back(2);c2.push_back(4);c3.push_back(5);c3.push_back(1);std::cout << "c1 = ";std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;std::cout << "c2 = ";std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;// c1与c2合并,合并默认情况下以升序排列c2.merge(c1);std::cout << "c2 = ";std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;// 此时c1为空。std::cout << "c1 = ";std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;// 倒序c2.sort(std::greater<int>());std::cout << "c2 = ";std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;// c1与c3合并,并降序排列c3.merge(c2, std::greater<int>());std::cout << "c3 = ";std::copy(c3.cbegin(), c3.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;}void test_list_remove(){std::list<int> c1;c1.push_back(5);c1.push_back(100);c1.push_back(5);c1.push_back(200);c1.push_back(5);c1.push_back(300);std::cout << "The initial list is c1 = ";std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;std::list<int> c2 = c1;c2.remove(5);std::cout << "After removing elements with value 5, the list becomes c2 = ";std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;}template <class T> class is_odd: public std::unary_function<T, bool> {public:bool operator()(T& val){return (val % 2) == 1;}};void test_list_removeif(){std::list<int> c1;c1.push_back(3);c1.push_back(4);c1.push_back(5);c1.push_back(6);c1.push_back(7);c1.push_back(8);std::cout << "The initial list is c1 = ";std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;std::list<int> c2 = c1;c2.remove_if(is_odd<int>());std::cout << "After removing the odd elements, "<< "the list becomes c2 = ";std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;}void test_list_reverse(){std::list<int> c1;c1.push_back(10);c1.push_back(20);c1.push_back(30);std::cout << "c1 = ";std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;c1.reverse();std::cout << "Reversed c1 = ";std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;}void test_list_sort(){std::list<int> c1;c1.push_back(20);c1.push_back(10);c1.push_back(30);std::cout << "Before sorting: c1 = ";std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;c1.sort();std::cout << "After sorting c1 = ";std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;c1.sort(std::greater<int>());std::cout << "After sorting with 'greater than' operation, c1 = ";std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;}// insert()和splice()的区别在于:// insert()将原始数据的副本插入到目标地址// splice()则将原始区间移到目标地址void test_list_splice(){std::list<int> c1, c2, c3, c4;std::list<int>::iterator c1_Iter, c2_Iter, w_Iter, f_Iter, l_Iter;c1.push_back(10);c1.push_back(11);c2.push_back(12);c2.push_back(20);c2.push_back(21);c3.push_back(30);c3.push_back(31);c4.push_back(40);c4.push_back(41);c4.push_back(42);std::cout << "c1 = ";std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;std::cout << "c2 = ";std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;w_Iter = c2.begin();w_Iter++;c2.splice(w_Iter, c1);std::cout << "After splicing c1 into c2: c2 = ";std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;// 注意这时c1为空了。std::cout << "c1 = ";std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;f_Iter = c3.begin();c2.splice(w_Iter, c3, f_Iter);std::cout << "After splicing the first element of c3 into c2: c2 = ";std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;f_Iter = c4.begin();l_Iter = c4.end();l_Iter--;c2.splice(w_Iter, c4, f_Iter, l_Iter);std::cout << "After splicing a range of c4 into c2: c2 = ";std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;}// unique()只能压缩相邻的相同值,如-10, 10, 10, 20, 20, -10会压缩为一个-10, 10, 20, -10// 如果要压缩,需要先排序void test_list_unique(){std::list<int> c1;std::list<int>::iterator c1_Iter, c2_Iter,c3_Iter;std::not_equal_to<int> mypred;c1.push_back(-10);c1.push_back(10);c1.push_back(10);c1.push_back(20);c1.push_back(20);c1.push_back(-10);std::cout << "The initial list is c1 = ";std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;std::list<int> c2 = c1;c2.unique();std::cout << "After removing successive duplicate elements, c2 = ";std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;std::list<int> c3 = c2;c3.unique(mypred);std::cout << "After removing successive unequal elements, c3 = ";std::copy(c3.cbegin(), c3.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;}void test_list_emplace(){std::list<int> c1;c1.push_back(10);c1.push_back(20);c1.push_back(30);c1.push_back(40);c1.push_back(50);int i = 60;int j = 70;int k = 80;c1.emplace(c1.begin(), std::move(i));c1.emplace_front(std::move(j));c1.emplace_back(std::move(k));std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));}