にコピー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
問題はどこだ?
を使用する必要があります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());
イテレータを使用するベクトルのコンストラクタを使用するだけです。
std::set<T> s;
//...
std::vector v( s.begin(), s.end() );
vにsのコンテンツが必要であり、データをコピーする前にvには何もないと仮定します。
セットの内容を保持するのに十分なスペースをベクターオブジェクトに予約していません。
std::vector<double> output(input.size());
std::copy(input.begin(), input.end(), output.begin());
std::copy
空のコンテナに挿入するために使用することはできません。これを行うには、次のようにinsert_iteratorを使用する必要があります。
std::set<double> input;
input.insert(5);
input.insert(6);
std::vector<double> output;
std::copy(input.begin(), input.end(), inserter(output, output.begin()));