list常用函数的例子

  1. void test_list_assign()  
  2. {  
  3.     std::list<int> c1;  
  4.     std::list<int> c2;  
  5.     c1.push_back(10);  
  6.     c1.push_back(20);  
  7.     c1.push_back(30);  
  8.     c1.push_back(40);  
  9.     c1.push_back(50);  
  10.     c2.push_back(60);  
  11.     c2.push_back(70);  
  12.     c2.push_back(80);  
  13.     c2.push_back(90);  
  14.   
  15.     std::cout << "c1 = ";  
  16.     std::copy(c1.begin(), c1.end(), std::ostream_iterator<int>(std::cout, " "));  
  17.     std::cout << std::endl;  
  18.     std::cout << "c2 = ";  
  19.     std::copy(c2.begin(), c2.end(), std::ostream_iterator<int>(std::cout, " "));  
  20.     std::cout << std::endl;  
  21.   
  22.     c1.assign(++c2.begin(), c2.end());  
  23.     std::cout << "c1 = ";  
  24.     std::copy(c1.begin(), c1.end(), std::ostream_iterator<int>(std::cout, " "));  
  25.     std::cout << std::endl;  
  26.   
  27.     c1.assign(2, 99);  
  28.     std::cout << "c1 = ";  
  29.     std::copy(c1.begin(), c1.end(), std::ostream_iterator<int>(std::cout, " "));  
  30.     std::cout << std::endl;  
  31. }  
  32.   
  33. void test_list_merge()  
  34. {  
  35.     std::list <int> c1, c2, c3;  
  36.     c1.push_back(3);  
  37.     c1.push_back(6);  
  38.     c2.push_back(2);  
  39.     c2.push_back(4);  
  40.     c3.push_back(5);  
  41.     c3.push_back(1);  
  42.   
  43.     std::cout << "c1 = ";  
  44.     std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));  
  45.     std::cout << std::endl;  
  46.   
  47.     std::cout << "c2 = ";  
  48.     std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));  
  49.     std::cout << std::endl;  
  50.   
  51.     // c1与c2合并,合并默认情况下以升序排列  
  52.     c2.merge(c1);  
  53.     std::cout << "c2 = ";  
  54.     std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));  
  55.     std::cout << std::endl;  
  56.     // 此时c1为空。  
  57.     std::cout << "c1 = ";  
  58.     std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));  
  59.     std::cout << std::endl;  
  60.   
  61.     // 倒序  
  62.     c2.sort(std::greater<int>());  
  63.     std::cout << "c2 = ";  
  64.     std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));  
  65.     std::cout << std::endl;  
  66.   
  67.     // c1与c3合并,并降序排列  
  68.     c3.merge(c2, std::greater<int>());  
  69.     std::cout << "c3 = ";  
  70.     std::copy(c3.cbegin(), c3.cend(), std::ostream_iterator<int>(std::cout, " "));  
  71.     std::cout << std::endl;  
  72. }  
  73.   
  74. void test_list_remove()  
  75. {  
  76.     std::list<int> c1;  
  77.     c1.push_back(5);  
  78.     c1.push_back(100);  
  79.     c1.push_back(5);  
  80.     c1.push_back(200);  
  81.     c1.push_back(5);  
  82.     c1.push_back(300);  
  83.   
  84.     std::cout << "The initial list is c1 = ";  
  85.     std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));  
  86.     std::cout << std::endl;  
  87.   
  88.     std::list<int> c2 = c1;  
  89.     c2.remove(5);  
  90.     std::cout << "After removing elements with value 5, the list becomes c2 = ";  
  91.     std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));  
  92.     std::cout << std::endl;  
  93. }  
  94.   
  95. template <class T> class is_odd: public std::unary_function<T, bool>   
  96. {  
  97. public:  
  98.     bool operator()(T& val)  
  99.     {  
  100.         return (val % 2) == 1;  
  101.     }  
  102. };  
  103.   
  104. void test_list_removeif()  
  105. {  
  106.     std::list<int> c1;  
  107.     c1.push_back(3);  
  108.     c1.push_back(4);  
  109.     c1.push_back(5);  
  110.     c1.push_back(6);  
  111.     c1.push_back(7);  
  112.     c1.push_back(8);  
  113.   
  114.     std::cout << "The initial list is c1 = ";  
  115.     std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));  
  116.     std::cout << std::endl;  
  117.   
  118.     std::list<int> c2 = c1;  
  119.     c2.remove_if(is_odd<int>());  
  120.   
  121.     std::cout << "After removing the odd elements, "  
  122.         << "the list becomes c2 = ";  
  123.     std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));  
  124.     std::cout << std::endl;  
  125. }  
  126.   
  127. void test_list_reverse()  
  128. {  
  129.     std::list<int> c1;  
  130.     c1.push_back(10);  
  131.     c1.push_back(20);  
  132.     c1.push_back(30);  
  133.   
  134.     std::cout << "c1 = ";  
  135.     std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));  
  136.     std::cout << std::endl;  
  137.   
  138.     c1.reverse();  
  139.     std::cout << "Reversed c1 = ";  
  140.     std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));  
  141.     std::cout << std::endl;  
  142. }  
  143.   
  144. void test_list_sort()  
  145. {  
  146.     std::list<int> c1;  
  147.     c1.push_back(20);  
  148.     c1.push_back(10);  
  149.     c1.push_back(30);  
  150.   
  151.     std::cout << "Before sorting: c1 = ";  
  152.     std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));  
  153.     std::cout << std::endl;  
  154.   
  155.     c1.sort();  
  156.     std::cout << "After sorting c1 = ";  
  157.     std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));  
  158.     std::cout << std::endl;  
  159.   
  160.     c1.sort(std::greater<int>());  
  161.     std::cout << "After sorting with 'greater than' operation, c1 = ";  
  162.     std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));  
  163.     std::cout << std::endl;  
  164. }  
  165.   
  166. // insert()和splice()的区别在于:  
  167. // insert()将原始数据的副本插入到目标地址  
  168. // splice()则将原始区间移到目标地址  
  169. void test_list_splice()  
  170. {  
  171.     std::list<int> c1, c2, c3, c4;  
  172.     std::list<int>::iterator c1_Iter, c2_Iter, w_Iter, f_Iter, l_Iter;  
  173.     c1.push_back(10);  
  174.     c1.push_back(11);  
  175.     c2.push_back(12);  
  176.     c2.push_back(20);  
  177.     c2.push_back(21);  
  178.     c3.push_back(30);  
  179.     c3.push_back(31);  
  180.     c4.push_back(40);  
  181.     c4.push_back(41);  
  182.     c4.push_back(42);  
  183.   
  184.     std::cout << "c1 = ";  
  185.     std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));  
  186.     std::cout << std::endl;  
  187.   
  188.     std::cout << "c2 = ";  
  189.     std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));  
  190.     std::cout << std::endl;  
  191.   
  192.     w_Iter = c2.begin();  
  193.     w_Iter++;  
  194.     c2.splice(w_Iter, c1);  
  195.     std::cout << "After splicing c1 into c2: c2 = ";  
  196.     std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));  
  197.     std::cout << std::endl;  
  198.     // 注意这时c1为空了。  
  199.     std::cout << "c1 = ";  
  200.     std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));  
  201.     std::cout << std::endl;  
  202.   
  203.     f_Iter = c3.begin();  
  204.     c2.splice(w_Iter, c3, f_Iter);  
  205.     std::cout << "After splicing the first element of c3 into c2: c2 = ";  
  206.     std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));  
  207.     std::cout << std::endl;  
  208.   
  209.     f_Iter = c4.begin();  
  210.     l_Iter = c4.end();  
  211.     l_Iter--;  
  212.     c2.splice(w_Iter, c4, f_Iter, l_Iter);  
  213.     std::cout << "After splicing a range of c4 into c2: c2 = ";  
  214.     std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));  
  215.     std::cout << std::endl;  
  216. }  
  217.   
  218. // unique()只能压缩相邻的相同值,如-10, 10, 10, 20, 20, -10会压缩为一个-10, 10, 20, -10  
  219. // 如果要压缩,需要先排序  
  220. void test_list_unique()  
  221. {  
  222.     std::list<int> c1;  
  223.     std::list<int>::iterator c1_Iter, c2_Iter,c3_Iter;  
  224.     std::not_equal_to<int> mypred;  
  225.     c1.push_back(-10);  
  226.     c1.push_back(10);  
  227.     c1.push_back(10);  
  228.     c1.push_back(20);  
  229.     c1.push_back(20);  
  230.     c1.push_back(-10);  
  231.   
  232.     std::cout << "The initial list is c1 = ";  
  233.     std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));  
  234.     std::cout << std::endl;  
  235.   
  236.     std::list<int> c2 = c1;  
  237.     c2.unique();  
  238.     std::cout << "After removing successive duplicate elements, c2 = ";  
  239.     std::copy(c2.cbegin(), c2.cend(), std::ostream_iterator<int>(std::cout, " "));  
  240.     std::cout << std::endl;  
  241.   
  242.     std::list<int> c3 = c2;  
  243.     c3.unique(mypred);  
  244.     std::cout << "After removing successive unequal elements, c3 = ";  
  245.     std::copy(c3.cbegin(), c3.cend(), std::ostream_iterator<int>(std::cout, " "));  
  246.     std::cout << std::endl;  
  247. }  
  248.   
  249. void test_list_emplace()  
  250. {  
  251.     std::list<int> c1;  
  252.     c1.push_back(10);  
  253.     c1.push_back(20);  
  254.     c1.push_back(30);  
  255.     c1.push_back(40);  
  256.     c1.push_back(50);  
  257.     int i = 60;  
  258.     int j = 70;  
  259.     int k = 80;  
  260.   
  261.     c1.emplace(c1.begin(), std::move(i));  
  262.     c1.emplace_front(std::move(j));  
  263.     c1.emplace_back(std::move(k));  
  264.   
  265.     std::copy(c1.cbegin(), c1.cend(), std::ostream_iterator<int>(std::cout, " "));  
  266. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值