sizeof () вектор - PullRequest
       16

sizeof () вектор

15 голосов
/ 03 марта 2010

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

Ответы [ 6 ]

23 голосов
/ 03 марта 2010

Вы хотите 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

11 голосов
/ 03 марта 2010

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

6 голосов
/ 03 марта 2010

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

2 голосов
/ 03 марта 2010

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

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

1 голос
/ 03 марта 2010

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

0 голосов
/ 03 марта 2010

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

...