161

にコピー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

問題はどこだ?

4

8 に答える 8

232

を使用する必要があります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()); 
于 2011-02-17T20:32:10.503 に答える
138

イテレータを使用するベクトルのコンストラクタを使用するだけです。

std::set<T> s;

//...

std::vector v( s.begin(), s.end() );

vにsのコンテンツが必要であり、データをコピーする前にvには何もないと仮定します。

于 2011-02-17T20:36:00.033 に答える
26

セットの内容を保持するのに十分なスペースをベクターオブジェクトに予約していません。

std::vector<double> output(input.size());
std::copy(input.begin(), input.end(), output.begin());
于 2011-02-17T20:33:24.033 に答える
1

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())); 
于 2011-02-17T20:34:25.927 に答える