Sizeof() вектор

У меня есть структура данных vector<set<char> > (база транзакций), и я хочу знать ее размер. Когда я использую sizeof() с каждым set<char>, размер равен 24, несмотря на то, что набор содержит 3, 4 или 5 символов. Позже, когда я использую sizeof() с vector<set<char> >, размер равен 12... Я полагаю, что это не способ узнать размер структуры данных. Любая помощь? Спасибо.

Ответ 1

Вы хотите 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) (обычно один байт). Если вы хотите узнать размер памяти в контейнере и его элементы в памяти, вы можете сделать это:

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

Ответ 2

sizeof возвращает размер самого объекта. если он содержит указатель на массив, например, он не будет считать размер массива, он будет считать только размер указателя (4 на 32 бита) для использования вектором .size

Ответ 3

Вектор реализуется с использованием внутренних указателей на фактическое хранилище. Следовательно, sizeof() всегда будет возвращать тот же результат, который не содержит самого хранилища данных. Вместо этого попробуйте использовать метод vector::size(). Это вернет число элементов в векторе.

Ответ 4

sizeof() вычисляется во время компиляции, поэтому он не может сказать вам, сколько его элементов внутри.

Используйте метод size() для векторного объекта.

Ответ 5

vector в STL - это шаблон класса, когда вы указываете параметр шаблона внутри <SomeType> следующего вектора, компилятор С++ сгенерировал код для класса типа SomeType. Поэтому, когда вы заполняете вектор с помощью push_back, вы фактически вставляете другой объект SomeType, поэтому, когда вы запрашиваете .size() из компилятора, он дает вам количество объектов SomeType, вставленных вами.
Надеюсь, что это поможет!

Ответ 6

Используйте функцию-член vector::size(), чтобы узнать количество элементов в векторе. Подсказка - они выделены в свободном магазине.