这是我提交的一段代码。它工作了,但它让我思考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
的描述让我觉得插入3
和4
会导致它们覆盖1
和2
,因为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
中的向量将不会改变。