1

std::vector があります。このベクトルを次のように割り当てます

vec.assign(20000, 0);

これで、ベクトルに挿入する追加の配列ができました。ただし、挿入だけでなく、ベクター内の要素をさらに置き換えます。

uint8_t a[] = {1,2,3,4,5,6,7,8};

新しいメモリを割り当てずに、その配列を位置 x - x+8 のベクトルに移動します。

私が試して動作するのはもちろんです

vec.insert(start, a, a+8);

しかし、そこで新しいメモリを割り当てており、ベクトルのサイズが変更されていますが、これは発生するはずがありません。はい、多すぎるエントリを削除することはできますが、まだ問題があり、より多くのメモリを割り当てています。配列をベクトルの内容に置き換えるだけの可能性はありませんか? そのようなもの:

vec.replace(start, a, a+8);

各要素の交換は避けたかったので、時間がかかりすぎるのではないかと心配しています。

どう思いますか?それを行う方法はありますか?あなたも以前にその問題を抱えていましたか?どのように修正しましたか?

4

1 に答える 1

6

単純

#include <algorithm>

std::copy(a, a + 8, vec.begin());

aからまでの要素をコピーし、 からa + 8始まる要素を置き換えますvec.begin()

効率を気にするのは間違っていると思います。上記の解決策は各要素を置き換えますが、置換コードを自分で書いた場合よりも効率的である可能性があります。上記のコードに利点があるとすれば、それは明快さであり、見過ごされがちな利点です。

于 2012-10-16T10:17:04.017 に答える