web-dev-qa-db-ja.com

ベクトルのバイト単位のサイズの取得

この単純で愚かな質問で申し訳ありませんが、どこにも見つかりませんでした。

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(ベクトルサイズ)にアイテムの数を掛けることによって?

8
Davlog

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

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

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

11
AdamIerymenko

ベクトルは動的メモリに格納されているコンテンツとは別の重要なオブジェクトであるため、おそらくベクトルのサイズバイト単位で知りたくないでしょう。

std::vector<int> v { 1, 2, 3 };  // v on the stack, v.data() in the heap

おそらく知りたいのは、データのサイズ、つまりベクトルの現在の内容を格納するために必要なバイト数です。これを行うには、次を使用できます

template<typename T>
size_t vectorsizeof(const typename std::vector<T>& vec)
{
    return sizeof(T) * vec.size();
}

またはあなたはただすることができます

size_t bytes = sizeof(vec[0]) * vec.size();
9
kfsone

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

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

sizeof(std::vector<int>);

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

MyVector.size() * sizeof(int)

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

2
Thomas Russell