17

データ構造(トランザクションデータベース)がvector<set<char> >あり、そのサイズを知りたいです。sizeof()を使用するset<char>と、セットに3、4、または5文字が含まれているにもかかわらず、サイズは24になります。後で、vector<set<char> >サイズが12のsizeof()を使用すると、これはデータ構造のサイズを知る方法ではないと思います。何か助けはありますか?ありがとう。

4

6 に答える 6

25

あなたが欲しいvector::size()set::size()

vあなたのベクトルであると仮定して、これを行います:

size_t size = 0;
for (vector<set<char> >::const_iterator cit = v.begin(); cit != v.end(); ++cit) {
    size += cit->size();
}

sizeof()適用されるオブジェクト/タイプのメモリ内サイズを倍数sizeof(char)(通常は1バイト)で提供します。コンテナとその要素のメモリ内サイズを知りたい場合は、次のようにすることができます。

sizeof(v) + sizeof(T) * v.capacity(); // where T is the element type

于 2010-03-03T16:54:46.517 に答える
12

sizeofオブジェクト自体のサイズを返します。たとえば、配列へのポインタが含まれている場合、配列のサイズはカウントされません。ベクトルで使用する場合は、ポインタのサイズ(32ビットで4)のみがカウントされます。.size

于 2010-03-03T16:55:40.593 に答える
7

ベクターは、実際のストレージへの内部ポインターを使用して実装されます。したがって、sizeof()は常に、データストレージ自体を含まない同じ結果を返します。vector::size()代わりにこの方法を使用してみてください。これにより、ベクトル内の要素の数が返されます。

于 2010-03-03T16:56:39.917 に答える
2

sizeof()はコンパイル時に計算されるため、内部に含まれる要素の数を知る方法はありません。

size()ベクトルオブジェクトのメソッドを使用します。

于 2010-03-03T16:54:52.307 に答える
1

vectorSTLはクラステンプレートであり、次のベクトル内にテンプレートパラメータを指定すると<SomeType>、C++コンパイラはSomeType型のクラスのコードを生成します。したがって、を使用してベクトルにデータを入力すると、push_back実際には別のオブジェクトが挿入されるため、コンパイラからSomeType要求すると、挿入されたオブジェクトの数がわかります。 お役に立てば幸いです。.size()SomeType

于 2010-03-03T17:11:37.070 に答える
0

vector::size()メンバー関数を使用して、ベクトル内のアイテムの数を調べます。ヒント-それらは無料ストアに割り当てられます。

于 2010-03-03T16:55:45.440 に答える