当前位置:   article > 正文

C++ Primer复习和学习笔记 第九章 顺序容器_将处理后的 list 容器复制到两 个 deque 容器中:list 容器的元素如果为偶数,则复

将处理后的 list 容器复制到两 个 deque 容器中:list 容器的元素如果为偶数,则复



  1. /*
  2. 假设有【任意定义】的数组 ia ,将 ia 复制到一个 vector 容器和一个 list 容器中。使用单个迭代器参数版本的 erase
  3. 函数将 list 容器中的奇数值元素删除掉,然后将vector 容器中的偶数值元素删除掉。
  4. */
  5. #include "iostream"
  6. #include "vector"
  7. #include "deque"
  8. #include "list"
  9. using namespace std;
  10. int main()
  11. {
  12. // 用于输入任意的元素保存在ia数组中。
  13. vector<int> ivsource;
  14. int iVal;
  15. while (cin>>iVal)
  16. {
  17. ivsource.push_back(iVal);
  18. }
  19. cin.clear();
  20. int * ia=new int[ivsource.size()];
  21. vector<int>::iterator iter=ivsource.begin();
  22. for (size_t i=0;i!=ivsource.size(),iter!=ivsource.end();++i,++iter)
  23. {
  24. *(ia+i)=*iter;
  25. }
  26. //把ia数组中的内容分别保存在vector和list中
  27. list<int> ilist(ia,ia+ivsource.size());
  28. vector<int> ivector(ia,ia+ivsource.size());
  29. //输出没有处理前的vector中的元素
  30. cout<<"输出没有处理前的vector中的元素"<<endl;
  31. for (vector<int>::iterator iter=ivector.begin();iter!=ivector.end();++iter)
  32. {
  33. cout<<*iter<<" ";
  34. }
  35. cout<<endl;
  36. //输出没有处理前的list中的元素
  37. cout<<"输出没有处理前的list中的元素"<<endl;
  38. for (list<int>::iterator iter=ilist.begin();iter!=ilist.end();++iter)
  39. {
  40. cout<<*iter<<" ";
  41. }
  42. //删除vector中的偶数元素
  43. for (vector<int>::iterator iter=ivector.begin();iter!=ivector.end();)
  44. {
  45. if (*iter%2==0)
  46. {
  47. iter=ivector.erase(iter);
  48. }
  49. else
  50. {
  51. ++iter;
  52. }
  53. }
  54. //输出处理后的vector中的元素
  55. cout<<"\n输出处理后的vector中的元素"<<endl;
  56. for (vector<int>::iterator iter=ivector.begin();iter!=ivector.end();++iter)
  57. {
  58. cout<<*iter<<" ";
  59. }
  60. cout<<endl;
  61. //删除list中的奇数元素
  62. for (list<int>::iterator iter=ilist.begin();iter!=ilist.end();)
  63. {
  64. if (*iter%2==1)
  65. {
  66. iter=ilist.erase(iter);
  67. /*
  68. 不要使用:iter=ilist.erase(iter);
  69. --iter;
  70. 然后在for循环的最后一个位置上使用++iter
  71. 因为返回的迭代器已经指向了被删除元素的下一个位置,所以我们没有必要再次的移动回来。然后在for循环中++iter
  72. */
  73. }
  74. else
  75. {
  76. ++iter;
  77. }
  78. }
  79. //输出处理后的list中的元素
  80. cout<<"输出处理后的list中的元素"<<endl;
  81. for (list<int>::iterator iter=ilist.begin();iter!=ilist.end();++iter)
  82. {
  83. cout<<*iter<<" ";
  84. }
  85. cout<<endl;
  86. return 0;
  87. }


  1. /*
  2. 假设有如下 ia 的定义,将 ia 复制到一个 vector 容器和一个 list 容器中。使用单个迭代器参数版本的 erase
  3. 函数将 list 容器中的奇数值元素删除掉,然后将vector 容器中的偶数值元素删除掉。
  4. int ia[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 55, 89 };
  5. */
  6. #include "iostream"
  7. #include "vector"
  8. #include "string"
  9. #include "list"
  10. #include "deque"
  11. #include "algorithm"
  12. using namespace std;
  13. int main()
  14. {
  15. int ia[]={0,1,1,2,3,5,8,13,21,55,89};
  16. int i=(sizeof(ia)/sizeof(*ia));
  17. vector<int> ivec(ia,ia+i);
  18. list<int> ilst(ia,ia+i);
  19. cout<<"删除元素之前的vector:"<<endl;
  20. for (vector<int>::iterator it=ivec.begin();it!=ivec.end();++it)
  21. {
  22. cout<<*it<<" ";
  23. }
  24. cout<<"\n删除元素之前的list"<<endl;
  25. for (list<int>::iterator it=ilst.begin();it!=ilst.end();++it)
  26. {
  27. cout<<*it<<" ";
  28. }
  29. for (vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
  30. {
  31. if (*iter%2==0)
  32. {
  33. iter=ivec.erase(iter);
  34. }
  35. }
  36. for (list<int>::iterator lit=ilst.begin();lit!=ilst.end();++lit)
  37. {
  38. if(*lit%2==1)
  39. {
  40. lit=ilst.erase(lit);
  41. --lit;
  42. }
  43. }
  44. cout<<"\n删除元素之后的vector:"<<endl;
  45. for (vector<int>::iterator it=ivec.begin();it!=ivec.end();++it)
  46. {
  47. cout<<*it<<" ";
  48. }
  49. cout<<"\n删除元素之后的list"<<endl;
  50. for (list<int>::iterator it=ilst.begin();it!=ilst.end();++it)
  51. {
  52. cout<<*it<<" ";
  53. }
  54. cout<<endl;
  55. return 0;
  56. }



  1. /*
  2. 编写程序将 int 型的 list 容器的所有元素复制到两个 deque 容器中。list 容器的元素如果为偶数,则复制到
  3. 一个 deque 容器中;如果为奇数,则复制到另一个 deque 容器里。
  4. 奇数odd 偶数 even
  5. pop_back()操作会擦除最后一个元素,但是不会返回这个数值。
  6. back()操作会返回最后一个元素,但是不会擦除这个数值。
  7. */
  8. #include "iostream"
  9. #include "vector"
  10. #include "string"
  11. #include "list"
  12. #include "deque"
  13. using namespace std;
  14. int main()
  15. {
  16. int popVal=0;
  17. list<int> listint;
  18. int i=0;
  19. while (i!=10)
  20. {
  21. listint.push_back(i);
  22. ++i;
  23. }
  24. deque<int> odd,even;
  25. while (!listint.empty())
  26. {
  27. popVal=listint.back();
  28. listint.pop_back();
  29. if (popVal%2==0)
  30. {
  31. even.push_back(popVal);
  32. }
  33. else
  34. {
  35. odd.push_back(popVal);
  36. }
  37. }
  38. while (!odd.empty())
  39. {
  40. cout<<odd.back()<<" ";
  41. odd.pop_back();
  42. }
  43. cout<<endl;
  44. while (!even.empty())
  45. {
  46. cout<<even.back()<<" ";
  47. even.pop_back();
  48. }
  49. return 0;
  50. }


本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号