как очистить std::vector насовсем?
От: Аноним  
Дата: 02.12.05 20:53
Оценка: -3 :))) :)
На правах шутки. Сразу в юмор не переносите, таки C++ specific юмор.


    std::vector<int> vec;

    //std::vector<int>().swap(vec);
    memset(&vec, 0, sizeof(vec));
    assert(vec.size() == 0);
    assert(vec.capacity() == 0);
Re: как очистить std::vector насовсем?
От: Кодт Россия  
Дата: 02.12.05 21:19
Оценка: :))) :))
Здравствуйте, Аноним, Вы писали:

Насовсем — это не совсем насовсем а только до следующей переустановки ОС на свежеотформатированный винт.
Перекуём баги на фичи!
Re: как очистить std::vector насовсем?
От: Аноним  
Дата: 02.12.05 21:43
Оценка:
Какое э это насовсем. brain.. т.е. memory leak налицо.
Re: как очистить std::vector насовсем?
От: McSeem2 США http://www.antigrain.com
Дата: 03.12.05 02:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>    std::vector<int> vec;
А>    memset(&vec, 0, sizeof(vec));
А>


На самом деле, все зависит от реализации. Если вектор без нужды никакой памяти не запрашивает (а именно так и должен делать правильный вектор), то никакого криминала нет. Правда и операция является бессмыссленной. А вот после хотя бы одного push_back — начинается незаметный кирдык.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[2]: как очистить std::vector насовсем?
От: sch  
Дата: 04.12.05 08:31
Оценка:
MS>На самом деле, все зависит от реализации. Если вектор без нужды никакой памяти не запрашивает (а именно так и должен делать правильный вектор), то никакого криминала нет. Правда и операция является бессмыссленной. А вот после
хотя бы одного push_back — начинается незаметный кирдык.

Позвольте, мосье, а как же неосвобожденная память, которая к этому моменту есть у вектора? UB начнется прямо после строчки memset(...), включая любые обращения к вектору и вызов его деструктора.
Re: как очистить std::vector насовсем?
От: RomanOdaisky Украина  
Дата: 04.12.05 20:44
Оценка:
Ладно, это все очень интересно, а вот скажите, как после

std::vector<int> v;

v.reserve(10000000000000000000000000000000000000000LLLLLLLLU);
v.push_back(1);
if(x)
    v.push_back(1);


ужать вектор до того размера, который реально нужен?


С уважением, Роман.
До последнего не верил в пирамиду Лебедева.
Re[2]: как очистить std::vector насовсем?
От: Вадим Никулин Россия Здесь
Дата: 05.12.05 06:36
Оценка:
Здравствуйте, RomanOdaisky, Вы писали:

RO>Ладно, это все очень интересно, а вот скажите, как после



RO>ужать вектор до того размера, который реально нужен?

RO>)

Крутые мужики
Автор(ы): Герб Саттер, Андрей Александреску

Эта книга поможет новичку стать профессионалом, так как в ней
представлен сконцентрированный лучший опыт программистов на C++,
обобщенный двумя экспертами мирового класса. Начинающий программист
найдет в ней простые и понятные рекомендации для ежедневного
использования, подкрепленные примерами их конкретного применения
на практике.
рекомендуют так:
std::vector<int> v;
v.reserve( 10 );
v.push_back( 1 );
v.swap( std::vector<int>( v ) );
Re[3]: как очистить std::vector насовсем?
От: Pavel Chikulaev Россия  
Дата: 05.12.05 06:51
Оценка:
Здравствуйте, Вадим Никулин, Вы писали:

ВН>Крутые мужики
Автор(ы): Герб Саттер, Андрей Александреску

Эта книга поможет новичку стать профессионалом, так как в ней
представлен сконцентрированный лучший опыт программистов на C++,
обобщенный двумя экспертами мирового класса. Начинающий программист
найдет в ней простые и понятные рекомендации для ежедневного
использования, подкрепленные примерами их конкретного применения
на практике.
рекомендуют так:

ВН>
ВН>std::vector<int> v;
ВН>v.reserve( 10 );
ВН>v.push_back( 1 );
ВН>v.swap( std::vector<int>( v ) );
ВН>

Они рекомендовали так:
std::vector<int>(v).swap(v);

Но результат конечно же такой же.

А очистить контейнер рекоммендовали так:
std::vector<int>().swap(v);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.