この質問に触発され、ベクトルをそれ自体に追加する方法を尋ねると、私の最初の考えは次のとおりでした(そして、はい、今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 を使用しています。