繁体   English   中英

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

[英]C++ std::vector clear all elements

考虑一个std::vector

std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);

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

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

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

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

请注意, vec.clear()始终如此快速,并且没有优化器执行它的工作最有可能比构造新向量并将其分配给vec更快。

它们是不同的:

clear是保证不会改变的能力。

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


clear保证是这个规则:

在调用reserve()之后发生的插入期间不会发生重新分配,直到插入使向量的大小大于capacity()的值reserve()为止

发布条件clear

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

转让条件:

a = rv;

a应等于rv在此赋值之前的值

a = il;

将范围[il.begin(),il.end())分配给a。 a的所有现有元素都被分配或销毁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM