C++vector使用的一些注意事项
1. 初始化
创新互联建站从2013年成立,先为璧山等服务建站,璧山等地企业,进行企业商务咨询服务。为璧山企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
c++ 11以后新增了大括号{}的初始化方式,需要注意与()的区别,如:
std::vector
std::vector
2. 添加元素:push_back
通过push_back添加新的元素进入vector后,vector的内存有时候会发生变化,这取决于size和capacity大小,当然这些都是系统来处理的,详细可以参考stl源码
当size 当size==capacity的时候,会重新申请另外一块内存,然后copy过去加到尾部,这个时候就会有变化了。 对于stl的容器,都有成员: begin() //起始位置 end() //结束位置 size() //当前大小 capacity() //当前容量,即已申请的内存大小 vector是一段连续的内存空间,有三个标识内存的位置,start,end,finish, size=end-start, capacity=finish-start 很多时候在使用vector的时候,会看到size=capacity,这个时候直接添加元素到尾部,内存明显是不够的,此时会重新在别处分配一块大小足够 有时候也有size 3. 关于earse和remove erase返回的是当前删除的元素的一下个位置的迭代器,所以需要注意的是遍历时候的++运算,这个与其它list,map差不多, 需要注意的earse后内存并未真正的清空,仅仅是删除内容,真正的容量大小capacity并没有改变,需要通过swap来实现capacity的减小 全部清空可以考虑:vector //remove只是通过迭代器的指针向前移动来删除,将不需要删除的元素往前移,因此需要删除的就都在尾部了 //返回新的指向尾部需要删除的元素的迭代器 因此还是得配合earse来使用,所以一般真要删除,建议直接遍历使用earse 4. 关于vector< bool> -- 慎用 出处: https://www.jb51.net/article/167636.htm vector< bool> 并不是一个STL容器,不是一个STL容器,不是一个STL容器! 首先vector< bool> 并不是一个通常意义上的vector容器,这个源自于历史遗留问题。 早在C++98的时候,就有vector< bool>这个类型了,但是因为当时为了考虑到节省空间的想法,所以vector< bool>里面不是一个Byte一个Byte储存的,它是一个bit一个bit储存的! 因为C++没有直接去给一个bit来操作, 所以用operator[]的时候, 正常容器返回的应该是一个对应元素的引用, 但是对于vector< bool>实际上访问的是一个”proxy reference”而不是一个”true reference”,返回的是”std::vector< bool>:reference”类型的对象。 因此,使用auto自动类型推导时会出现问题 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对创新互联的支持。std::cout << "vecNum push back init" << std::endl;
vector
auto itor = vecNum.begin();
for( ; itor != vecNum.end(); )
{
auto num = *itor;
if(num == 60)
{
itor = vecNum.erase(itor);
break;
}
else
{
itor++;
}
}
std::cout << "after erase element 60:" << std::endl;
printVector(vecNum);
vector
auto itor = remove_if(vecNum.begin(), vecNum.end(),[](int x)->bool{ return x == 20; });
//or
//auto itor = remove(vecNum.begin(), vecNum.end(),20);
//通过erase删除
vecNum.erase(itor, vecNum.end());
//vector
网页标题:C++vector使用的一些注意事项
本文URL:http://scjbc.cn/article/jpeeih.html