2

ベクトルのサイズを予測するにはどうすればよいですか?

#include <vector>
#include <iostream>
using namespace std;

int main() {
    cout << sizeof(vector<char[8]>) << endl;
    cout << sizeof(vector<char[16]>) << endl;
    return 0;
}

[starlon@localhost LCDControl]$ ./test 
12
12
4

5 に答える 5

12

それvector<>自体は独自の動的メモリ管理を行うクラスであるため、sizeof演算子を使用してサイズについて尋ねることはあまり意味がありません。上記で計算した値は常に 12 になることがわかると思います。

.size()メソッドを使用して、含まれる要素の数をベクトルに問い合わせることができます。また、.capacity()メソッドは、実際にメモリを割り当てた要素の数を示します (それらがまだすべて使用されていない場合でも)。

はコンパイル時にsizeof評価されるため、後で実行時にコンテナーに挿入される要素の数を知ることはできません。

于 2009-10-12T19:02:03.263 に答える
3

sizeof は、常に第 1 レベルのオブジェクト/タイプのサイズを返します。オブジェクトが他の場所で指しているメモリの量を測定しようとはしません。sizeof が返す 12 バイトは、vector のデータ メンバーのサイズを反映しています。これらのメンバーの 1 つは、実際のデータを指すポインターです。

于 2009-10-12T19:05:02.523 に答える
1

size() というメソッドがあり
ます。これは、中に含まれる要素の数を示します。
ただし、オブジェクトには実際のデータへのポインターが含まれているだけなので、オブジェクトのサイズにはこれが反映されません。

ところで、char の配列のベクトルを宣言しています。これはあなたが本当に欲しいものですか?

これも:

std::cout << std::vector<X>(Y) << "\n";

(おそらく) X や Y に関係なく、常に同じ値を返す必要があります。

于 2009-10-12T19:01:10.113 に答える
0

正確に何をしたいですか、std::vector8 または 16 chars を含む a がどのくらいのメモリを占有するかを知りたいですか?

それがあなたの望みなら、上記のコードは間違っています。上記のコードが示すのはstd::vector、要素が の配列であるa のサイズですchar。オブジェクト自体のサイズはわかりますstd::vectorが、要素が占めるメモリの量については何も言いません。そのメモリは、によって動的に割り当てられますvector

要素のメモリは実行時に動的に割り当てられますが、 はコンパイル時の演算sizeof子であるため、演算子でこれを知ることはできません。sizeof

于 2009-10-12T19:02:52.997 に答える