为什么这段代码工作正常?(vector.clear(), vector<vector<int> >)



这是我提交的一段代码。它工作了,但它让我思考clear()是如何准确地用于向量的。

vector<vector<int> > result;
vector<int> temp;
temp.push_back(1);
temp.push_back(2);
result.push_back(temp);
temp.clear();
temp.push_back(3);
temp.push_back(4);
result.push_back(temp);
//print result vector here.

为什么结果向量是[[1, 2], [3, 4]] ?

以下是cppreference对vector.clear()的看法:

从容器中移除所有元素。使任何引用无效;指针,或引用所包含元素的迭代器。可能会失效任何过端迭代器。留下vector的capacity()不变。

我怀疑这种行为不应该被依赖。

清除临时向量不应该破坏其内容吗?此外,对cppreference的描述让我觉得插入34会导致它们覆盖12,因为temp矢量没有分配任何新的内存?

下面是ideone的代码:https://ideone.com/Onwlro

push_back接受引用,但它复制函数中传递的值。从cppreference

void push_back( const T& value );(1)

void push_back( T&& value );(2) (since C++11)

将给定的元素值附加到容器的末尾。

1)新元素初始化为value的副本。

2)值被移动到新元素中。

由于它正在复制向量,所以当您调用temp.clear()

时,result中的向量将不会改变。

最新更新