この質問は、次のトピックから派生しています。
タイプのデータ構造を使用していvector<vector<vector<double> > >
ます。double
項目 ( ) が追加される前に、これらの各ベクトル (外側のベクトルを除く) のサイズを知ることはできません。各「ディメンション」のアイテム数のおおよそのサイズ (上限) を取得できます。
vector<vector<vector<double> > >
共有ポインタを使用したソリューションが最適な方法かもしれませんが、単に.reserve()
十分なスペースを確保した (または他の方法で十分なメモリを割り当てた)ソリューションを試してみたいと思います。
A.reserve(500)
[1000][10000] などの大きなサイズの「2D」ベクトルを保持するには (サイズが 500 であるか、サイズの上限であると仮定して) 十分でしょうか?
私の質問の主な理由はA
、 の時点での内部のサイズを合理的に見積もる方法が見当たらないからです.reserve(500)
。
私の質問の例:
vector<vector<vector<int> > > A;
A.reserve(500+1);
vector<vector<int> > temp2;
vector<int> temp1 (666,666);
for(int i=0;i<500;i++)
{
A.push_back(temp2);
for(int j=0; j< 10000;j++)
{
A.back().push_back(temp1);
}
}
これにより、A の再割り当てが行われないことが保証されますか?
temp2.reserve(100000)
とが作成時に追加された場合、temp1.reserve(1000)
これにより、再割り当てがまったく発生しないことが保証されますか?
.reserve()
上記では、保守的な呼び出しが原因でメモリが浪費される可能性があるという事実を無視してください。
よろしくお願いします!