sizeof () вектор

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

16
задан Nicolás 3 March 2010 в 16:55
поделиться

6 ответов

Вы хотите установить vector :: size () и : : 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.cap город(); // где T - тип элемента

24
ответ дан 30 November 2019 в 16:00
поделиться

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

0
ответ дан 30 November 2019 в 16:00
поделиться

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

6
ответ дан 30 November 2019 в 16:00
поделиться

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

12
ответ дан 30 November 2019 в 16:00
поделиться

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

Используйте метод size() объекта vector.

2
ответ дан 30 November 2019 в 16:00
поделиться

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

1
ответ дан 30 November 2019 в 16:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: