Мне надо чтоб он расширялся при необходимости,
но никогда память не сбрасывал,
но нужно чтоб очищался логически, т.е.
push начинался сначала после очистки но в туже память,
это возможно?
06.09.05 12:06: Перенесено из 'C/C++. Прикладные вопросы'
Здравствуйте, Аноним, Вы писали:
А>Мне надо чтоб он расширялся при необходимости, А>но никогда память не сбрасывал, А>но нужно чтоб очищался логически, т.е. А>push начинался сначала после очистки но в туже память, А>это возможно?
Он так и работает. Про "в ту же память" гарантий нет, но если capacity() достаточная, то перераспределения памяти при вставке не происходит.
Здравствуйте, Аноним, Вы писали:
А>Мне надо чтоб он расширялся при необходимости, А>но никогда память не сбрасывал, А>но нужно чтоб очищался логически, т.е. А>push начинался сначала после очистки но в туже память, А>это возможно?
Возможно. Зарезервируй достаточно места (capacity()) под элементы через reserve(N); — и пока size() <= capacity(), память не будет сброшена.
Здравствуйте, Аноним, Вы писали:
А>Мне надо чтоб он расширялся при необходимости, А>но никогда память не сбрасывал, А>но нужно чтоб очищался логически, т.е. А>push начинался сначала после очистки но в туже память, А>это возможно?
Я думаю возможно, елси очищать его через erase().
Удачи тебе, браток!
Re[2]: Как заставить векторор не освобождать память
Здравствуйте, Glоbus, Вы писали:
G>Я думаю возможно, елси очищать его через erase().
Чтобы емкость массива не уменьшалась, не нужно предпринимать совершенно ничего. Вот наоборот, чтобы освободить память, нужно извернуться (скопировать в другой вектор и обменяться с ним через swap; в случае пустого вектора, естественно, копировать не нужно).
Re[3]: Как заставить векторор не освобождать память
Здравствуйте, Gleb Alexeev, Вы писали:
GA>Здравствуйте, Glоbus, Вы писали:
G>>Я думаю возможно, елси очищать его через erase().
GA>Чтобы емкость массива не уменьшалась, не нужно предпринимать совершенно ничего.
А если я сделаю clear() вектор не освобождает память?
Удачи тебе, браток!
Re[4]: Как заставить векторор не освобождать память
Здравствуйте, Glоbus, Вы писали:
G>Здравствуйте, Gleb Alexeev, Вы писали:
GA>>Здравствуйте, Glоbus, Вы писали:
G>>>Я думаю возможно, елси очищать его через erase().
GA>>Чтобы емкость массива не уменьшалась, не нужно предпринимать совершенно ничего.
G>А если я сделаю clear() вектор не освобождает память?
Нет не освободит, перерераспределение памяти произойдет при вставке и только в случае если:
vec.size() < vec.capacity()
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[5]: Как заставить векторор не освобождать память
Здравствуйте, srggal, Вы писали:
S>Здравствуйте, Glоbus, Вы писали:
G>>Здравствуйте, Gleb Alexeev, Вы писали:
GA>>>Здравствуйте, Glоbus, Вы писали:
G>>>>Я думаю возможно, елси очищать его через erase().
GA>>>Чтобы емкость массива не уменьшалась, не нужно предпринимать совершенно ничего.
G>>А если я сделаю clear() вектор не освобождает память?
S>Нет не освободит, перерераспределение памяти произойдет при вставке и только в случае если: S>
S> vec.size() < vec.capacity()
S>
Я вот тут посмотрел исходники стл для ВС 7.1 и там есть такой метод, который вызывает clear()
void _Tidy()
{ // free all storageif (_Myfirst != 0)
{ // something to free, destroy and deallocate it
_Destroy(_Myfirst, _Mylast);
this->_Alval.deallocate(_Myfirst, _Myend - _Myfirst); }
_Myfirst = 0, _Mylast = 0, _Myend = 0;
}
Интересует выделенная строчка — что она "деаллоцирует"?
Удачи тебе, браток!
Re[4]: Как заставить векторор не освобождать память
Здравствуйте, Dirichlet, Вы писали:
D>Здравствуйте, Glоbus, Вы писали:
G>>А если я сделаю clear() вектор не освобождает память?
D>В стандарте сказано, что не должен.
Из стандарта:
Table 67—Sequence requirements (in addition to container)
Здравствуйте, Dirichlet, Вы писали:
D>Можно просто использовать .resize( 0 ) вместо .clear( ).
100 согласен, но только в том случае если позволяют условия задачи, и все клиенты вектора будут "знать" что вместо .clear() следует вызывать .resize( 0 ).
А если нет ?
В любом случае Решения найдены и выброр за автором темы