当前位置:   article > 正文

C++ 容器(二)——容器操作

C++ 容器(二)——容器操作

一、容器的修改

容器修改函数

insert():在指定位置插入一个或多个元素
erase():删除指定位置或指定范围的元素
push_back():将元素添加到容器的末尾
pop_back():删除容器的最后一个元素
push_front():将元素添加到容器的开头
pop_front():删除容器的第一个元素
resize():改变容器的大小
capacity():输出的是Vector数组内部存储空间的容量大小

注:1、动态数组Vector没有提供头部增删(push_front()、pop_front())功能(和数组一样,删除除尾部索引的需要修改后面元素的索引值,很繁琐),链表list有。

2、resize():改变容器的大小(能容纳的元素个数)。

代码示例:通过上述函数,实现动态数组vector的增删改查。

  1. #include <vector>
  2. #include <list>
  3. #include <iostream>
  4. #include <string>
  5. using namespace std;
  6. int main()
  7. {
  8. vector<int>vec = {1,2,3,4,5};
  9. list<int>lst = {1,2,3,4,5};
  10. auto it = vec.begin();
  11. vec.insert(it + 2,10);//在第三个位置插入元素10,迭代器加法操作只适用于vector容器操作
  12. it = vec.begin();
  13. vec.erase(it + 1);//删除第二个元素
  14. // 使用push_back()和pop_back()函数在容器尾部添加和删除元素
  15. vec.pop_back();//删除末尾元素
  16. vec.push_back(6);//添加末尾元素6
  17. // for(it = vec.begin();it != vec.end();it++)
  18. // {
  19. // if(it != vec.end()-1)
  20. // cout<<*it<<",";
  21. // else
  22. // cout<<*it;
  23. // }
  24. for(auto i:vec)//foreach遍历
  25. {
  26. cout<<i<<",";
  27. }
  28. cout<<endl;
  29. cout<<"vec动态数组的容器中元素个数是:"<<vec.capacity()<<endl;
  30. vec.resize(20);
  31. cout<<"修改容器大小后的容器元素个数:"<<vec.capacity()<<endl;
  32. // cout<<"容器vec所占内存空间大小为:"<<sizeof(vec)<<"字节"<<endl;
  33. // 使用push_front()和pop_front()函数在容器头部添加和删除元素
  34. lst.pop_front();
  35. lst.push_front(10);
  36. cout<<"lst中的元素有:";
  37. for(auto i = lst.begin();i != lst.end();i++)
  38. {
  39. if(i != lst.end()--)
  40. cout<<*i<<",";
  41. else
  42. cout<<*i;
  43. }
  44. return 0;
  45. }

运行结果:

  1. 1,10,3,4,6,
  2. vec动态数组的容器中元素个数是:10
  3. 修改容器大小后的容器元素个数:20
  4. 容器vec所占内存空间大小为:24字节
  5. lst中的元素有:10,2,3,4,5,

 二、容器的操作

容器操作函数
sort():对容器中的元素进行排序 (不适用于list)
reverse():将容器中的元素反转
unique():去除容器中相邻的重复元素
count():计算容器中指定元素的数量
find():在容器中查找指定元素,并返回其位置的迭代器
remove():从容器中删除指定元素(将要删除元素移到末尾)

注:unique()、remove()函数操作方式,vector和list,不同,list(链表)可以直接使用,而vector需要配合erase()删除操作才能使用。

vector代码示例:

  1. vec.erase(unique(vec.begin(),vec.end()),vec.end());
  2. //将相邻并相等的元素,取其一,移动到数组的后面
  3. //返回移动到数组末尾的第一个元素的迭代器
  4. //最后将移动到数组末尾的元素进行删除。
  5. vec.erase(remove(vec.begin(),vec.end(),4),vec.end());
  6. //将要移除的元素(4),移动到数组的后面
  7. //返回移动到数组末尾的第一个元素的迭代器
  8. //最后将移动到数组末尾的元素进行删除。

list代码示例:

  1. lst.unique();
  2. lst.remove(4);

 三、案例代码

代码示例:

  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4. #include <algorithm>
  5. using namespace std;
  6. int main()
  7. {
  8. vector<int>vec = {5,3,3,1,4,2};
  9. list<int>lst = {5,3,3,1,4,2};
  10. sort(vec.begin(),vec.end());
  11. for(auto it = vec.begin();it != vec.end();it++)
  12. {
  13. if(it != vec.end()-1)
  14. cout<<*it<<",";
  15. else
  16. cout<<*it;
  17. }
  18. cout<<endl;
  19. reverse(vec.begin(),vec.end());
  20. cout<<"---------------"<<endl;
  21. for(auto it = vec.begin();it != vec.end();it++)
  22. {
  23. if(it != vec.end()-1)
  24. cout<<*it<<",";
  25. else
  26. cout<<*it;
  27. }
  28. cout<<endl;
  29. vec.erase(unique(vec.begin(),vec.end()),vec.end());
  30. cout<<"---------------"<<endl;
  31. for(auto it = vec.begin();it != vec.end();it++)
  32. {
  33. if(it != vec.end()-1)
  34. cout<<*it<<",";
  35. else
  36. cout<<*it;
  37. }
  38. cout<<endl;
  39. vec.erase(remove(vec.begin(),vec.end(),4),vec.end());
  40. cout<<"---------------"<<endl;
  41. for(auto it = vec.begin();it != vec.end();it++)
  42. {
  43. if(it != vec.end()-1)
  44. cout<<*it<<",";
  45. else
  46. cout<<*it;
  47. }
  48. cout<<endl;
  49. lst.sort();
  50. lst.unique();
  51. lst.remove(4);
  52. cout<<"---------------"<<endl;
  53. auto i = lst.begin();
  54. advance(i,lst.size()-1);
  55. for(auto it = lst.begin();it != lst.end();it++)
  56. {
  57. if(it != i)
  58. cout<<*it<<",";
  59. else
  60. cout<<*it;
  61. }
  62. cout<<endl;
  63. return 0;
  64. }

运行结果:

  1. 1,2,3,3,4,5
  2. ---------------
  3. 5,4,3,3,2,1
  4. ---------------
  5. 5,4,3,2,1
  6. ---------------
  7. 5,3,2,1
  8. ---------------
  9. 1,2,3,5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/563521
推荐阅读
相关标签
  

闽ICP备14008679号