私は、データ構造とproblemを持つC++ 03でプロジェクトを持っている:私は継続的にpop_front-一backに持っていても、リストの代わりにベクトルを使用しています。しかし、今のところ、あまりにも多くのコードを書き直す必要があるので、これは大丈夫です。ポップ・プッシュのstd ::ベクトルからの要素と再利用要素が
私のアプローチは、最後のframe_sizeポイントのバッファを常に更新しています。だから各フレーム私は前面にポップして戻ってする必要があります。 (mayebeは、このアプローチのために名前がありますか?)
はので、私はこのコードを使用:私はオブジェクトプールのためのいくつかのすぐに使用できるコードを持っていると私は思っ
Point apoint; // allocate new point
apoint.x = xx;
apoint.y = yy;
int size = points.size()
if (size > frame_size) {
this->points.erase(points.begin()); // pop_front
}
this->points.push_back(apoint);
を:それはないです素晴らしい最適化が、私はプールにフロントを格納することができますので、私はポイントの割り当て時間を得ることができます。
OKこれは意味をなさないので、便利ではおそらくありませんが、私はちょうど教育好奇心に頼む:どのように私はそれを行うことができますか?
は、どのように私はそれをを再利用するためのベクターの消去要素のメモリを保存することができますか?この質問は理にかなっていますか?そうでない場合、なぜですか?
...消去が消去ベクトルを返さないので、それは返す:
ある関数呼び出しによって消去最後の要素を踏襲要素 の新しい場所を指すランダムアクセスイテレータ、 操作が シーケンス内の最後の要素を消去した場合、ベクトルの終了。
// don't do this on an empty vector assert (points.size() > 0); // rotate elements in the vector, erasing the first element // and duplicating the last one copy (points.begin()+1, points.end(), points.begin()); // overwrite the last element with your new data points.back().x = xx; points.back().y = yy;
EDIT:マイクとして、私はあなたが何をしたいのか理解することはわからないんだけど、これはあなたが一時的
Point
インスタンスを作成せずに、書いたものにfunctionnally同等でなければなりません
'pop_front'を連続して' list'を使いたくないのなら、なぜ 'std :: deque'ではないのですか? –
問題は、私はstd :: vectorを使うユーティリティがたくさんあるので、ユーティリティやリポジトリを開き、リストやデキューのためにベクトルを取るすべてをテンプレート(または書き換え)する必要があります。 – nkint
ポイントの重い重量の作成ですか?あなたはベクトルにオブジェクトへのポインタではなくオブジェクトを格納しています。オブジェクトをプールに保存する場合は、オブジェクトではなくポインタとしてオブジェクトを格納することをお勧めします。 – Jagannath