データ構造(トランザクションデータベース)がvector<set<char> >
あり、そのサイズを知りたいです。sizeof()を使用するset<char>
と、セットに3、4、または5文字が含まれているにもかかわらず、サイズは24になります。後で、vector<set<char> >
サイズが12のsizeof()を使用すると、これはデータ構造のサイズを知る方法ではないと思います。何か助けはありますか?ありがとう。
6 に答える
あなたが欲しい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
sizeof
オブジェクト自体のサイズを返します。たとえば、配列へのポインタが含まれている場合、配列のサイズはカウントされません。ベクトルで使用する場合は、ポインタのサイズ(32ビットで4)のみがカウントされます。.size
ベクターは、実際のストレージへの内部ポインターを使用して実装されます。したがって、sizeof()は常に、データストレージ自体を含まない同じ結果を返します。vector::size()
代わりにこの方法を使用してみてください。これにより、ベクトル内の要素の数が返されます。
sizeof()
はコンパイル時に計算されるため、内部に含まれる要素の数を知る方法はありません。
size()
ベクトルオブジェクトのメソッドを使用します。
vector
STLはクラステンプレートであり、次のベクトル内にテンプレートパラメータを指定すると<SomeType>
、C++コンパイラはSomeType型のクラスのコードを生成します。したがって、を使用してベクトルにデータを入力すると、push_back
実際には別のオブジェクトが挿入されるため、コンパイラからSomeType
要求すると、挿入されたオブジェクトの数がわかります。
お役に立てば幸いです。.size()
SomeType
vector::size()
メンバー関数を使用して、ベクトル内のアイテムの数を調べます。ヒント-それらは無料ストアに割り当てられます。