の最初の項目を削除することは私のタイプでありますそれをしないでください。私はイテレータのオーバーロードを行う必要があるように見えます。ベクトル
私の構造体のイテレータのオーバーロードについてお勧めしますか?
の最初の項目を削除することは私のタイプでありますそれをしないでください。私はイテレータのオーバーロードを行う必要があるように見えます。ベクトル
私の構造体のイテレータのオーバーロードについてお勧めしますか?
で&
まさにあなたが提案したものです。
イテレータのオーバーロードを行う必要があります。
std::vector
の最初の要素を消去するためにイテレータをオーバーロードする必要はありません。
P.S.正面から消去する場合は、ベクター(動的配列)がデータ構造の選択肢として誤っている可能性があります。
std :: vector
@ブラッドB。ポインタが動的に割り当てられたオブジェクトを指していて、ポインタがそのオブジェクトを所有している場合は、ポインタを削除する前にオブジェクトを削除する必要があります。メモリを所有する裸のポインタを使うのは悪い考えです。 – user2079303
つの提案:
std::deque
の代わりに、あなたの特定のケースでのパフォーマンス向上のためstd::vector
および方法std::deque::pop_front()
を使用します。topPriorityRules.erase(topPriorityRules.begin());
ある
std::vector<Rule>& topPriorityRules;
考えるstd::vector<ScanRule>& topPriorityRules;
なぜ私は自分のベクターのpop_frontを取得していないのですか? –
明らかに、標準では実装されていません。[link](http://www.cplusplus.com/reference/vector/vector/?kw=vector)または[link](http://en.cppreference.com/w/cpp/container/vector)。その理由は '.pop_front()'メンバ関数はほぼ同じ量のメモリ(安定性の問題でもある)を割り当てなければならず、残りの部分をコピーしなければならないので、 'std :: vector'にとって非常に非効率的である。 'deque'は' pop_front() 'が必要な状況のために設計されています。実際には、インデックスによるランダムアクセスが必要ない場合にも、 'std :: list'も役に立ちます。 – VCSEL
どのようなエラーが表示されますか? – stark
は不可能です。私のベクトルはpop_frontを持っていません。ベクトルまたはカスタム構造体です。 –
可能でなければならないので、何か他のことが起こっています。 – acraig5075