15

これはおそらく単純で愚かな質問で申し訳ありませんが、どこにも見つかりませんでした。

std::vector のサイズをバイト単位で取得する方法がわかりません。

std::vector<int>MyVector;   
/* This will print 24 on my system*/   
std::cout << "Size of  my vector:\t" << sizeof(MyVector) << std::endl;

for(int i = 0; i < 1000; i++)
   MyVector.push_back(i);

/* This will still print 24...*/    
std::cout << "Size of  my vector:\t" << sizeof(MyVector) << std::endl;

では、ベクトルのサイズを取得するにはどうすればよいでしょうか?! たぶん、24(ベクターサイズ)にアイテムの数を掛けることでしょうか?

4

3 に答える 3

21

Vector は、その要素を内部的に割り当てられたメモリ配列に格納します。あなたはこれを行うことができます:

sizeof(std::vector<int>) + (sizeof(int) * MyVector.size())

これにより、ベクター構造体自体のサイズとその中のすべての int のサイズが得られますが、メモリ アロケーターが課す小さなオーバーヘッドが含まれていない場合があります。それを含めるプラットフォームに依存しない方法があるかどうかはわかりません。

于 2013-06-22T19:21:15.523 に答える
2

ベクターのサイズは、コンテナー実装自体のサイズと、その中に格納されているすべての要素のサイズの 2 つの主要な部分に分割されます。

コンテナー実装のサイズを取得するには、現在の状態を実行できます。

sizeof(std::vector<int>);

その中に格納されているすべての要素のサイズを取得するには、次のようにします。

MyVector.size() * sizeof(int)

次に、それらを合計して合計サイズを取得します。

于 2013-06-22T19:20:50.823 に答える