vector<set<char> >
データ構造(トランザクションデータベース)があり、そのサイズを知りたい。各set<char>
でsizeof()を使用すると、セットに3、4、または5文字が含まれているにもかかわらず、サイズは24です。後で、vector<set<char> >
でsizeof()を使用すると、サイズは12になります...これは、データ構造のサイズを知る方法ではないと思います。何か助けは?ありがとう。
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()
メソッドを使用します。
STLのvector
はクラステンプレートです。テンプレートパラメータを_<SomeType>
_内のベクトルに指定すると、C++コンパイラはタイプSomeTypeのクラスのコードを生成します。したがって、_Push_back
_を使用してベクトルを設定すると、実際にはSomeType
の別のオブジェクトが挿入されるため、コンパイラから.size()
を要求すると、SomeType
オブジェクトが挿入されました。
それが役に立てば幸い!
vector::size()
メンバー関数を使用して、ベクター内のアイテムの数を調べます。ヒント-それらは無料のストアに割り当てられます。