コピーstd::set
先std::vector
:
std::set <double> input;
input.insert(5);
input.insert(6);
std::vector <double> output;
std::copy(input.begin(), input.end(), output.begin()); //Error: Vector iterator not dereferencable
問題はどこだ?
ベストアンサー1
を使用する必要がありますback_inserter
:
std::copy(input.begin(), input.end(), std::back_inserter(output));
std::copy
は、挿入先のコンテナに要素を追加しません。追加できません。コンテナへの反復子のみを持ちます。このため、出力反復子を に直接渡す場合はstd::copy
、少なくとも入力範囲を保持するのに十分な大きさの範囲を指していることを確認する必要があります。
std::back_inserter
各要素のコンテナを呼び出す出力イテレータを作成しpush_back
、各要素をコンテナに挿入します。
std::vector
あるいは、コピーされる範囲を保持するのに十分な数の要素を作成することもできます。
std::vector<double> output(input.size());
std::copy(input.begin(), input.end(), output.begin());
または、std::vector
範囲コンストラクターを使用することもできます。
std::vector<double> output(input.begin(), input.end());