[英]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.