Здравствуйте, chaotic-kotik, Вы писали:
CK>CK>if (vec.capacity() / vec.size() > 2) {
CK> vector<int> tmp;
CK> tmp.reserve(vec.size());
CK> copy(begin(vec), end(vec), back_inserter(tmp));
CK> swap(tmp, vec);
CK>}
CK>bigAssCollection[key] = move(vec);
CK>
Ну всяко бывает, но, по идее, раз у нас коллекция на миллион векторов, то мы её в цикле наверное заполняем. И всё равно аллокация нужна.
Альтернативное решение -- иметь используемый в цикле аккомулятор, и из него копировать во вставляемые вектора с нужным reserve
std::vector<T> acc
for( 1000000 раз ) {
acc.clear()
заполняем acc
vector<T> tmp;
tmp.reserve( acc.size() )
bigCollection[key] =move( tmp )
}
По идее число аллокаций уменьшится...
Но в любом случае, я бы спрашивал не "как очистить вектор", а "как уменьшить capacity вектора", а то торудно понять про что спрашивают
Только на мой взгляд это мелкие мелочи же всё. Ну просто STL довольно долго был дебильной библиотекой, где вместо того, что бы вызвать какой-нибудь shrink_to_fit, надо страдать фигнёй. Если программист на С++ не понимает как работают такие контейнеры -- это странно. А если не знает всех этих stl-ных трюков, то это фигня на прочитать местный кодинг стайл или что-то вроде того...
Ну это если работадатель адекватный.
Обычно инженеры, особенно с 10+ лет опытом сложных проектов нужны не для того, что бы такого рода трюки лабать, а для чего-то другого...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском