C ++ std :: vector清除所有元素

时间:2017-08-22 09:48:02

标签: c++ c++11 stdvector

考虑Select

std::vector

std::vector<int> vec; vec.push_back(1); vec.push_back(2); vec.clear()会做同样的工作吗?第二种情况下的解除分配怎么样?

2 个答案:

答案 0 :(得分:9)

vec.clear()清除向量中的所有元素,为您保证vec.size() == 0

vec = std::vector<int>()调用copy / move(自C ++ 11)赋值运算符,将vec的内容替换为other的内容。在这种情况下,other是新构造的空vector<int>,这意味着它与vec.clear();具有相同的效果。唯一的区别是clear()不会影响向量的容量,而重新分配时,会重置它。

旧元素正确释放,就像使用clear()一样。

请注意,vec.clear()始终如此快,如果没有优化程序执行此工作,最有可能比构建新向量并将其分配给vec更快。

答案 1 :(得分:4)

他们是不同的:

clear保证不会改变容量。

不保证移动分配可以将容量更改为零,但在典型的实现中它可能会也将会发生。

clear保证符合此规则:

  

在调用reserve()之后发生的插入过程中不会发生重新分配,直到插入会使向量的大小大于capacity()

的值为止

clear的发布条件:

  

删除中的所有元素   容器。发布:a.empty()   返回true

转让条件:

  

a = rv;

     

a应等于    rv的值    在此之前    分配

     

a = il;

     

指定范围   [il.begin(),il.end())成一个。全部存在   a的元素分配给或   破坏。