C++、セットをベクトルにコピーする 質問する

C++、セットをベクトルにコピーする 質問する

コピーstd::setstd::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()); 

おすすめ記事