Добрый день
Хочется использовать std::vector (необходимо приведение к С массиву). Когда данные накапливаются в векторе, он сам распределяет пул/запас, используя больше памяти чем есть элементов. Против этого никто не возражает. Но вот когда данные накоплены, нужно избавиться от этого пула. В Qt такие ф-ции называются squeeze(). Экспериментируем в gcc 4.2
Печать
C++ (Qt)
static void PrintVec( const char * title, const std::vector <int> & vec )
{
printf("%s size = %ld, capacity = %ld\n", title, vec.size(), vec.capacity());
}
C++ (Qt)
std::vector <int> test;
test.resize(12100);
PrintVec("resize 12100", test); // (печатает) resize 12100 size = 12100, capacity = 12100 (ну гуд)
test.resize(12200);
PrintVec("resize 12200", test); // resize 12200 size = 12200, capacity = 24200 (решил запастись, ну ладно)
test.reserve(0);
PrintVec("reserve 0", test); // reserve 0 size = 12200, capacity = 24200 (на уменьшение reserve бесполезно)
std::vector <int> test2(test);
PrintVec("test2", test2); // test2 size = 12200, capacity = 12200 (запас не копируется конструктором)
test.clear();
test.reserve(0);
PrintVec("clear & reserve", test); // clear & reserve size = 0, capacity = 24200 (зачистка не помогат)
// ладно, сделаю через 2 присвоения, но..
test = test2;
PrintVec("test = test2", test); // test = test2 size = 12200, capacity = 24200 (от мертвого осла уши :'()
Так как же все-таки избавиться от пула?
Спасибо