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

Aru*_* KS 7 c++ stdvector c++11

考虑一下std::vector:

std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
Run Code Online (Sandbox Code Playgroud)

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

Som*_*ken 9

vec.clear()从矢量中清除所有元素,让您保证vec.size() == 0.

vec = std::vector<int>()调用复制/移动(由于C++ 11)赋值运算符,这个替换的内容vec与该的other.other在这种情况下是一个新构造的空vector<int>,这意味着它的效果相同vec.clear();.唯一的区别是,clear()在重新分配的情况下不会影响矢量的容量,它会重置它.

正如他们所希望的那样,旧元素被正确释放clear().

请注意,vec.clear()总是一样快,没有优化器执行它的工作最有可能比构造一个新向量并将其分配给它更快vec.


eer*_*ika 5

它们是不同的:

clear 保证不改变容量。

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


clear担保是这条规则:

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

发布条件clear

擦除容器中的所有元素。职位:a.empty() 退货true

分配后条件:

a = rv;

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

a = il;

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

  • @CinCout - 该链接指向一个非常糟糕的参考。看到这个更好的 http://en.cppreference.com/w/cpp/container/vector (3认同)