这是我提交的代码片段。它有效,但它让我想到了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()
所说的内容:
从容器中删除所有元素。使任何引用无效, 指向包含元素的指针或迭代器。可能会失效 任何过去的迭代器。留下载体的容量() 不变。
我怀疑不应该依赖这种行为。
清除临时矢量是不是要破坏内容?此外,cppreference
上的说明让我觉得插入3
和4
会导致它们覆盖1
和2
,因为temp
向量没有分配任何新记忆?
以下是ideone上的代码:https://ideone.com/Onwlro
答案 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()
中的矢量不会被更改