У меня есть a vector<set<char> >
структура данных (база данных транзакций) и я хочу знать размер его. Когда я использую sizeof () с каждым set<char>
размер 24 несмотря на набор, содержит 3, 4 или 5 символов. Позже, когда я использую sizeof () с vector<set<char> >
размер равняется 12... Я предполагаю, что это не способ знать размер структуры данных. Какая-либо справка? Спасибо.
Вы хотите установить 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 - тип элемента
Используйте функцию-член vector::size()
, чтобы узнать количество элементов в векторе. Подсказка - они выделяются на свободном хранилище.
Вектор реализован с использованием внутренних указателей на реальное хранилище. Поэтому sizeof() всегда будет возвращать один и тот же результат, который не включает само хранилище данных. Попробуйте вместо этого использовать метод vector::size()
. Он вернет количество элементов в векторе.
sizeof
возвращает размер самого объекта. если он содержит указатель на массив, например, он не будет считать размер массива, он будет считать только размер указателя (4 на 32 бита) для использования вектора .size
sizeof()
вычисляется во время компиляции, поэтому он никак не может сказать вам, сколько элементов у него внутри.
Используйте метод size()
объекта vector.
vector
в STL является шаблоном класса, когда вы передаете параметр шаблона внутри
следующего вектора, компилятор C++ генерирует код для класса типа SomeType. Поэтому, когда вы заполняете вектор с помощью push_back
, вы фактически вставляете еще один объект SomeType
, поэтому, когда вы запрашиваете .size()
у компилятора, он выдает вам количество объектов SomeType
, вставленных вами.
Надеюсь, это поможет!