【发布时间】:2015-08-28 15:13:10
【问题描述】:
这是我提交的代码的 sn-p。它起作用了,但它让我想到了 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
【问题讨论】:
-
临时复制到结果中。是的,temp会被清空,elems会被删除,但是result中的副本不会被删除。
-
感谢您的评论。这就是我第一眼看到的东西。但我的印象是
push_back应该只为 non-primitive 数据类型复制temp向量的指针引用。您能否提供一些参考以确保数据被逐个元素地复制? -
www.cplusplus.com/reference/vector/vector/push_back/