3

私はstackoverflowに関するこのトピックに関する多くの質問を読みました。しかし、どれにも答えが見つかりませんでした。したがって、この質問。

私は持っています

vector< vector< int > > temp

外部ベクトル用にメモリを予約できます:

temp.reserve(20);

ここで、内部ベクトルごとにメモリを予約したいと思います。私はこれを使用して行うことができます:

temp[i].reserve(500);

ただし、temp.clear();を使用すると その場合、tempの容量は20として保持されます。ただし、tempベクトルを20個の内部ベクトルで初期化すると、これらの内部ベクトルの容量は0にリセットされます(VS2010 Intellisenseによる)。

私の質問:

  1. 外部ベクトルをクリアして再初期化した後でも、内部ベクトル容量500を維持するにはどうすればよいですか?

  2. OpenCVのfindContours関数を使用しています。この関数は、外部ベクトルをクリアし、内部ベクトルの新しいセットで埋めます。この関数は、メモリの割り当て解除と再割り当てを引き起こしますか?

4

1 に答える 1

1

1)C++では使用できません。定義上、外部ベクトルをクリアすると、内部ベクトルが破棄され、すべてのメモリが解放されます。

2)外側のベクトルをクリアして再作成している場合は、割り当て解除とそれに続く割り当てが発生します。

残念ながら、私はあなたの根本的な問題が何であるかを理解することができないので、可能な解決策に関してこれ以上の助けを提供することはできません。

編集:プールに格納されている/プールから取得されている内部ベクトルへの(おそらくスマートな)ポインターのベクトルを常に外部にすることができます。次に、外部がクリアされると、ポインタ自体のみがクリアされ、プールされた内部ベクトルはまだ残ります。

于 2012-08-10T02:22:20.537 に答える