sizeof() вектор

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам