受这个问题的启发,询问如何将向量附加到自身,我的第一个想法是以下(是的,我现在意识到insert
这是一个更好的选择):
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
int main() {
std::vector<int> vec {1, 2, 3};
std::copy (std::begin (vec), std::end (vec), std::back_inserter (vec));
for (const auto &v : vec)
std::cout << v << ' ';
}
但是,这会打印:
1 2 3 1 * 3
每次运行程序时,* 都是不同的数字。只有 2 被替换的事实很奇特,如果真的有对此的解释,我很想听听。继续,如果我附加到不同的向量(原始的副本),它会正确输出。如果我在一行之前添加以下行,它也会正确输出copy
:
vec.reserve (2 * vec.size());
我的印象std::back_inserter
是一种将元素添加到容器末端的安全方法,尽管事先没有保留内存。如果我的理解是正确的,复制线有什么问题?
我认为这与编译器无关,但我使用的是 GCC 4.7.1。