c++ 之 vector技巧&避坑&提高效率

参考https://www.cnblogs.com/zsq1993/p/5929806.html 这位博主内容很详细

结合自己知识,整理如下,更方便使用,增加了要避开的坑和使用技巧

容器的使用

#include <vector>
{ 
  初始化
  //vector从0下标开始;
  vector<int> v, v1;//空容器
  vector<int> v(3)//包含3个元素;
  vector<int> v(3,9)//包含3个元素,每个元素都是9;
  vector<int> v(v1)//copy v1;
  int a[3] = {0,1,2};
  vector<int> v(a,a+3)//copy a数组;

  状态
  v.size()//返回v个数,空是时候是0,空时不可atuo i = v.begin();
  v.begin()//首地址
  v.end()//末元素地址+1;for里终止条件 auto i != v.end(); i < end(); i <= v.end()-1;
         //有点像数组最后一位的空位置
  v.at(i) == v[i]//推荐使用后者;
  bool is = v.empty();/空返回true,不空返回false;
  v.push_back(n)//在尾部添加n进容器;
  v.pop_back()//删除尾元素;
    二维容器
  vector<vector<int>>
  vector<int> v[5];
  遍历
  for(auto i = v.begin() ; i < v.end() ; i++ ) 
        cout << *i;auto 推荐使用;
  for(auto i = v.begin() ; i != v.end() ; i++ ) 
        cout << *i;
  for(vector<int>::iterator it = vecIntB.begin() ;it!=vecIntB.end();it++)   
        cout<<*it;

   通过数组修改
   1.通过数组方式修改, 如v[1] = 55;  // 推荐使用;

  删除
    v.erase(v.begin()+2)//删除第3个元素(v.begin()+2地址所在);
    v.erase(v.begin()+2,v.begin()+5)//删除第3-5个元素(v.begin()+4地址所在)及以后所有元素;
    v.erase(v.begin(),v.end());//清空
    v.clear() ;//清空;

  v.pop_back() & v.erase() & v.push_back 后 v.size() 会变;

    注:姑且认为中v(v.begin(),v.end()) => v(p1,p2),
       p1为操作起始地址,p2为操作元素末地址+1, 类似sort();
       大概就是像操作p1->p2,需要中(p1,p2+1)
      (!!!此条仅为方便记忆,不保证说法的严谨,也欢迎大家指正)


    如有错误,欢迎指正,如有不足,欢迎补充。
} 

欢迎转载,请注明出处即可
欢迎造访我的www.github.com/15715216140

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了提高C++ vector的性能,可以采取以下几种方法: 1. 免在vector前部插入元素:向vector前部插入元素会导致后续元素的重新分配和移动,这是一种效率较低的操作。相反,可以考虑使用push_back()函数将新元素添加到vector的末尾,这样可以免重新分配和移动元素的操作。 2. 使用下标进行遍历:使用下标访问vector的元素比使用迭代器更快。可以使用for循环并使用下标来遍历vector,而不是使用迭代器。 3. 使用赋值和insert()函数:当需要从一个vector中取出元素来填充另一个vector时,可以使用赋值运算符将整个vector赋值给目标vector,这样可以节省插入元素的时间。另外,可以使用insert()函数将一个vector的元素插入到另一个vector的末尾,这样可以免重新分配和移动元素的操作。 综上所述,为了提高C++ vector的性能,可以免在vector前部插入元素,使用下标进行遍历,并根据具体情况选择使用赋值和insert()函数来填充vector。这些方法可以有效地提高vector的性能。 [1 [2 [3&lt;span class=&quot;em&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;em&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;em&quot;&gt;3&lt;/span&gt; #### 引用[.reference_title] - *1* [C++ vector 性能优化:](https://blog.csdn.net/ShellDawn/article/details/87906632)[target=&quot;_blank&quot; data-report-click={&quot;spm&quot;:&quot;1018.2226.3001.9630&quot;,&quot;extra&quot;:{&quot;utm_source&quot;:&quot;vip_chatgpt_common_search_pc_result&quot;,&quot;utm_medium&quot;:&quot;distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1&quot;}}] [.reference_item style=&quot;max-width: 50%&quot;] - *2* *3* [6 个技巧,提升 C++11 的 vector 性能](https://blog.csdn.net/lxy_2011/article/details/122744130)[target=&quot;_blank&quot; data-report-click={&quot;spm&quot;:&quot;1018.2226.3001.9630&quot;,&quot;extra&quot;:{&quot;utm_source&quot;:&quot;vip_chatgpt_common_search_pc_result&quot;,&quot;utm_medium&quot;:&quot;distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1&quot;}}] [.reference_item style=&quot;max-width: 50%&quot;] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值