sizeof () std:: vector (C++)
есть тема уже на эту тему, но у меня все еще есть сомнения. Чтобы вычислить размер вектора, который является правильным:
sizeof(VEC) + sizeof(int) * VEC.capacity()
или
VEC.capacity() * (sizeof(VEC) + sizeof(int))
2 ответов
что вы подразумеваете под размер вектора? Размер векторного объекта просто
sizeof(vec);
Если вас интересует, сколько памяти вектор выделяется в куче, вы можете использовать
vec.capacity()*sizeof(T)
Итак, если вы добавите их, вы получите, сколько памяти вы "потеряли" из-за вектора.
vec.capacity()*sizeof(T) + sizeof(vec)
обратите внимание, что именно то, сколько памяти выделяется, зависит от реализации. Просто формула, приведенная выше, будет практически правильно (или приблизительно правильно) в большинстве, если не во всех реализациях.
Если вы хотите знать размер данных, содержащихся в векторе
std::vector<int> vec;
...
vec.size() * sizeof(decltype(bufferIn)::value_type))
Если тип изменен с int, чтобы сказать long long, больше ничего не нужно менять. Я нахожу это решение более безопасным, чем тот, который использует тип в sizeof, потому что его можно легко изменить без другого.
std::vector<long long> vec; // lets go from int to int64
...
vec.size() * sizeof(int); // woops problem on the horizon