のベクトルを維持する:は、私が機能を持っているデータのイテレータ
void get_good_items(const std::vector<T>& data,std::vector<XXX>& good_items);
この機能は、すべてのデータをチェックし、条件を満たし、彼らがgood_itemsでどこを返すのアイテムを見つける必要があります。
std::vector<XXX>
の代わりに何が最適でしょうか?すべての良いインデックスを含む
std::vector<size_t>
。std::vector<T*>
これらのアイテムには、アイテムへのポインタが含まれています。std::vector<std::vector<T>::iterator>
このアイテムにはイテレータが含まれています。- 他??
EDIT:
私はgood_items
で何をしますか? 多くのもの...その1つはベクトルから削除して別の場所に保存することです。多分後で
EDIT 2何か他:私にとって最も重要なの
一つはdata
でアイテムにアクセスする方法では、good_items
の構造体に応じて、速いのでしょうか?
EDIT 3:
私はちょうど私の考えは間違っていたことをrelizedています。生ポインタ(またはスマート)をベクトルの項目として保持する方が良いわけではないので、ポインタ(ベクトル)の実際の値を保持することができます。ポインタだけなので重いコピーを恐れません。
はあなたが唯一の呼び出し元の関数で結果を使用するか、またはあなたを行いますベクタが既に変更されている可能性があるため、再度使用できるようにストアしようとしていますか? 'get_good_items'とあなたが結果を使用している間のベクトルを変更している(他のスレッドの可能性もある)他のコードはありますか? – CompuChip
今のところスレッドセーフであることを心配しないでください –
データベクトルが変更された場合(要素の消去、あるメモリ範囲から別のメモリ範囲への移動など)、参照が破損します。この場合、良い項目をデータからgood_itemにコピーすることができます。データベクタに問題がなければ、ポインタに簡単にポインタを格納することができます(したがって、2つは対処が簡単で、読みやすくなります)。 – rbaleksandar