3

配列の内容をオフセットから始まるベクトルに書き込もうとしています。

std::copy(arr,&arr[100],std::back_inserter(vect[offset]);

ここで、arrは100個の整数の配列です。vectは、積分を含むベクトルです。上記のコードの何が問題になっていますか?

4

4 に答える 4

3

の引数は操作をstd::back_inserterサポートする必要があり、サポートしません。anはの結果です(がであると仮定します)。push_back()intintvect[offset]vectvector<int>

オフセットの代わりにイテレータを使用できる場合は、を使用できますstd::vector::insert()

于 2012-09-06T08:04:17.487 に答える
2

std::back_inserterオフセットではなく、背面に挿入します。必要なのはstd::inserter、挿入位置イテレータを使用(および更新)することです。

あなたはおそらく欲しいですstd::inserter(vect, vect.begin() + offset)

これにより、挿入操作ごとにテールシーケンスが繰り返し再配置されることに注意してください。insert()@Nimが示唆しているように、この場合、範囲全体を1つのステップで挿入するため、ストレートアップ操作が推奨されます。

于 2012-09-06T08:04:42.840 に答える
2

insert()関数、特にオフセットと範囲を取るバリアントを使用します。

vect.insert(vect.begin() + offset, arr,&arr[100]);
于 2012-09-06T08:06:19.170 に答える
1

間違っているのはback_inserter、イテレータのように見えますがpush_back、引数を呼び出すことです。これpush_back()は、コンテナの要素ではなく、 をサポートするコンテナでなければなりません。

オフセットから挿入する場合は、その位置に対応する反復子を見つけて、それを の 3 番目の引数として渡すstd::copyか、 の正しいオーバーロードを使用する必要がありstd::vector::insertます。もちろん、コンテナが十分な大きさであること、つまり からoffset_iterator最後までの範囲が少なくとも size であることを確認する必要があります100

于 2012-09-06T08:04:05.363 に答える