2

私が持っている場合:

std::vector<std::vector<double> > vec

各 vec[0]、vec[1]、... vec[vec.size()-1] にスペースを割り当てるとします。

私が電話するとしたら:

vec[3].resize(100)

前または後に割り当てられたベクトルvec[3]が再配置される可能性はありますか?

私が質問する理由は、上記の openmp セクションにネストされたベクトルがあるためです。各スレッドが制御しますvec[threadnum]。これらのスレッドが行ういくつかのサイズ変更があります。vec[thread]あるスレッドのサイズが変更され、他のスレッドがシフトされる可能性があるかどうか疑問に思っています。

4

1 に答える 1

4

ベクトルのサイズ変更 (または他のメソッドの呼び出し) を実行しても、他のベクトルは変更されません。

実際、オブジェクトのメソッドを呼び出しても、関連のない他のオブジェクトの状態は変わりません。

ここにベクトルのベクトルがあるという事実は、すべてのベクトルがそのデータを共通の連続したメモリ ブロックに格納すると想像すると、混乱を招く可能性があります。しかし、そうではありません。各ベクトルには独自のメモリ領域があり、各ベクトルは独立してメモリを再割り当てできます (「親」ベクトルは再配置についてまったく知りません)。

于 2013-05-31T20:50:35.013 に答える