配列の内容をオフセットから始まるベクトルに書き込もうとしています。
std::copy(arr,&arr[100],std::back_inserter(vect[offset]);
ここで、arrは100個の整数の配列です。vectは、積分を含むベクトルです。上記のコードの何が問題になっていますか?
の引数は操作をstd::back_inserter
サポートする必要があり、サポートしません。anはの結果です(がであると仮定します)。push_back()
int
int
vect[offset]
vect
vector<int>
オフセットの代わりにイテレータを使用できる場合は、を使用できますstd::vector::insert()
。
std::back_inserter
オフセットではなく、背面に挿入します。必要なのはstd::inserter
、挿入位置イテレータを使用(および更新)することです。
あなたはおそらく欲しいですstd::inserter(vect, vect.begin() + offset)
。
これにより、挿入操作ごとにテールシーケンスが繰り返し再配置されることに注意してください。insert()
@Nimが示唆しているように、この場合、範囲全体を1つのステップで挿入するため、ストレートアップ操作が推奨されます。
insert()
関数、特にオフセットと範囲を取るバリアントを使用します。
vect.insert(vect.begin() + offset, arr,&arr[100]);
間違っているのはback_inserter
、イテレータのように見えますがpush_back
、引数を呼び出すことです。これpush_back()
は、コンテナの要素ではなく、 をサポートするコンテナでなければなりません。
オフセットから挿入する場合は、その位置に対応する反復子を見つけて、それを の 3 番目の引数として渡すstd::copy
か、 の正しいオーバーロードを使用する必要がありstd::vector::insert
ます。もちろん、コンテナが十分な大きさであること、つまり からoffset_iterator
最後までの範囲が少なくとも size であることを確認する必要があります100
。