web-dev-qa-db-ja.com

sizeof()ベクトル

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

16
peterJk

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

24
user123456

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

12
Andrey

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

6
Stephen Doyle

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

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

2
Nicolás

STLのvectorはクラステンプレートです。テンプレートパラメータを_<SomeType>_内のベクトルに指定すると、C++コンパイラはタイプSomeTypeのクラスのコードを生成します。したがって、_Push_back_を使用してベクトルを設定すると、実際にはSomeTypeの別のオブジェクトが挿入されるため、コンパイラから.size()を要求すると、SomeTypeオブジェクトが挿入されました。
それが役に立てば幸い!

1
Rajendra Uppal

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

0