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

时间:2015-08-28 15:13:11

标签: c++ memory vector clear

这是我提交的代码片段。它有效,但它让我想到了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]]

以下是cppreferencevector.clear()所说的内容:

  

从容器中删除所有元素。使任何引用无效,   指向包含元素的指针或迭代器。可能会失效   任何过去的迭代器。留下载体的容量()   不变。

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

清除临时矢量是不是要破坏内容?此外,cppreference上的说明让我觉得插入34会导致它们覆盖12,因为temp向量没有分配任何新记忆?

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

1 个答案:

答案 0 :(得分:3)

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

  

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

     

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

     

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

     

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

     

2)将值移入新元素。

由于它正在复制矢量,因此当您调用result时,temp.clear()中的矢量不会被更改