2013-03-22 3 views
0

У меня есть структуры данных, которая выглядит какУправление памятью вектора структур данных

template < class T1, class T2 > struct sometype 
{ 
std::vector <T1> v1; 
std::vector <T2> v2; 
T1 deriv[10]; 
}; 

создать вектор структур данных

std::vector <sometype <T1, T2>> somevec; 

Мои сомнения, если я это делаю

somevec.erase(somevec.begin(), somevec.end()); 
std::vector <sometype <T1, T2>>().swap (somevec); 

Могу ли я восстановить память?

+2

регенерата *, что * память? И почему вы хотите это сделать? Какую проблему ты пытаешься решить? –

+0

@CodyGray Восстановить память, используемую sometype. Я хочу сохранить память, поскольку я решаю огромную проблему, когда мне нужно временно хранить около 10 миллионов сотов/ядро. –

ответ

3

Вы можете сделать лучше, чем это:

somevec.erase(somevec.begin(), somevec.end()); 
std::vector <sometype <T1, T2>>().swap (somevec); 

Все, что вам нужно сделать, это:

std::vector <sometype<T1, T2>>().swap(somevec); 

Это потому, что вы создаете временный, который пуст. Затем замените пустое содержимое на фактические данные somevec. Затем временное уничтожается и восстанавливает память, которая была выделена вашей переменной (поскольку память была заменена на временную).

Это называется "Уменьшить до Fit идиома"

+0

Хорошо. Мне не нужно делать ничего особенного, например, в случае многомерных указателей? –

+0

Должен работать нормально. Потому что вы уменьшаете первое измерение до нуля. Таким образом, все остальные измерения исчезли. –

+0

Благодарим вас за освобождение от путаницы :) –

Смежные вопросы