- 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, " "));
- }