std::vector<CMy> Как очистить???
От: Mr WeL Россия  
Дата: 10.03.03 02:22
Оценка:
есть такой вектор объектов
std::vector<CMy>  list;
for(int i=0;i<N;i++
{
   CMy my;
   ....
   list.push_back(my);
}


я его наполняю ...

в некоторый момент времени мне нужно удалить всё и зансти новые данные ...
(короче обновить, результат выборки из базы)

но в этом списке остаются старые объекты и плюс к ним новые из
песледующей выборки и даже выборок.

причём перед тем как занести новые объекты,
пишу
list.empty();
Re: std::vector<CMy> Как очистить???
От: Slamin США  
Дата: 10.03.03 03:08
Оценка:
Нужно:
list.clear();


list.empty() возвращает значение — пусти ли список.
There are 10 types of people in the world, those who don't understand binaries, those who do, and those who understand not only binaries.
Re: std::vector<CMy> Как очистить???
От: ssm Россия  
Дата: 10.03.03 07:25
Оценка:
Здравствуйте, Mr WeL, Вы писали:

{
   list.swap(std::vector<CMy>());
}
Re[2]: std::vector<CMy> Как очистить???
От: Bell Россия  
Дата: 10.03.03 07:36
Оценка:
Здравствуйте, ssm, Вы писали:

ssm>Здравствуйте, Mr WeL, Вы писали:


ssm>
ssm>{
ssm>   list.swap(std::vector<CMy>());
ssm>}
ssm>


Не думаю, что это хорошая идея. Автору вопроса нужно очистить вектор перед следующим заполнением. В этом случае неизбежно последуют реаллокэйты, что быстродействию никак не поможет. Использование clear тоже не решает всех проблем, но ИМХО все-таки эффективнее.
Любите книгу — источник знаний (с) М.Горький
Re[3]: std::vector<CMy> Как очистить???
От: ssm Россия  
Дата: 10.03.03 07:40
Оценка:
Здравствуйте, Bell, Вы писали:

B>Не думаю, что это хорошая идея. Автору вопроса нужно очистить вектор перед следующим заполнением.


Каюсь, провтыкал
Re[4]: std::vector<CMy> Как очистить???
От: Bell Россия  
Дата: 10.03.03 07:43
Оценка:
Здравствуйте, ssm, Вы писали:

ssm>Здравствуйте, Bell, Вы писали:


B>>Не думаю, что это хорошая идея. Автору вопроса нужно очистить вектор перед следующим заполнением.


ssm> Каюсь, провтыкал

Любите книгу — источник знаний (с) М.Горький
Re: Re: std::vector<CMy> Как очистить???
От: promko Украина  
Дата: 10.03.03 09:39
Оценка:
"Mr WeL" <forum@rsdn.ru> wrote in message news:210675@news.rsdn.ru...
> есть такой вектор объектов
>
> std::vector<CMy>  list;
> for(int i=0;i<N;i++
> {
> CMy my;
>    ....
>    list.push_back(my);
> }
>

люди — давайте оптимизировать код:
>
> std::vector<CMy>  list;
> for(int i=0; i<N; ++i)
> {
>    list.push_back(CMy()); // только в случае наявности конструктора без параметров
> }
>

есть еще предложения по оптимизации ?
можна и так пробовать (без явного цикла)
std::vector<CMy> list(N);
Posted via RSDN NNTP Server 1.4.5
Re[3]: std::vector<CMy> Как очистить???
От: ingvarwolf Канада  
Дата: 10.03.03 15:08
Оценка:
Здравствуйте, Bell, Вы писали:

>Использование clear тоже не решает всех проблем

А каких проблем не решает использование clear? Я таких проблем не знаю , подскажите, плз.
Re[4]: std::vector<CMy> Как очистить???
От: Bell Россия  
Дата: 10.03.03 15:25
Оценка:
Здравствуйте, ingvarwolf, Вы писали:

I>Здравствуйте, Bell, Вы писали:


>>Использование clear тоже не решает всех проблем

I>А каких проблем не решает использование clear? Я таких проблем не знаю , подскажите, плз.
Память не освобождается, т.е. после вызова clear() capacity остается какой и была.
Любите книгу — источник знаний (с) М.Горький
Re[2]: std::vector<CMy> Как очистить???
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 10.03.03 15:51
Оценка:
Здравствуйте, ssm, Вы писали:

На такой код компилятор должен ругнуться: аргументом vector::swap является неконстантная ссылка. Инициализировать ее временным объектом — нехорошо (хотя VC дает, а вот GCC — зарубит).

Его следует переписать так:
{
   std::vector<CMy>().swap( list );
}
Алексей Кирдин
Re[5]: std::vector<CMy> Как очистить???
От: ssm Россия  
Дата: 11.03.03 07:19
Оценка:
Здравствуйте, Bell, Вы писали:


I>>А каких проблем не решает использование clear? Я таких проблем не знаю , подскажите, плз.

B>Память не освобождается, т.е. после вызова clear() capacity остается какой и была.

тады так:
  
 //типа чистим 
 list.clear();

 //заполняем 
 ...
 //освободим лишнюю память(если это так надо)
 {
    std::vector<CMy> dummy;
    dummy.swap(list);
    list.swap(dummy);    
 }
Re[6]: std::vector<CMy> Как очистить???
От: Bell Россия  
Дата: 11.03.03 07:36
Оценка:
Здравствуйте, ssm, Вы писали:

ssm>тады так:

...
Я ж об этом уже писал здесь
Автор: Bell
Дата: 10.03.03

Любите книгу — источник знаний (с) М.Горький
Re[7]: std::vector<CMy> Как очистить???
От: ssm Россия  
Дата: 11.03.03 07:44
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, ssm, Вы писали:


ssm>>тады так:

B>...
B>Я ж об этом уже писал здесь
Автор: Bell
Дата: 10.03.03

B>

А я помню

 //типа чистим 

 //заполняем 

 //освободим лишнюю память(если это так надо)


это решает то, о чем ты писал здесь
Автор: Bell
Дата: 10.03.03
.
Re[2]: Re: std::vector<CMy> Как очистить???
От: Mr WeL Россия  
Дата: 11.03.03 07:53
Оценка:
Здравствуйте, promko, Вы писали:


P>люди — давайте оптимизировать код:

>>
>> std::vector<CMy>  list;
>> for(int i=0; i<N; ++i)
>> {
>>    list.push_back(CMy()); // только в случае наявности конструктора без параметров
>> }
>>


Ну это правильно.
Но ...
Зачем мне такая конструкция ... если все объекты безликие.

заметьте что я написал ... перез заполнением вектора ...
т.е. объект получает какие то данные ...

а так мне вектор пустых одниковых объктов никак не нужен

Спасибо!!! Всем !!! Заработало !!!

ЗЫ

Хотя вернее было бы назвать функцию empty() как isEmpty()! Но это другая история.
Re[5]: std::vector<CMy> Как очистить???
От: ingvarwolf Канада  
Дата: 12.03.03 09:20
Оценка:
Здравствуйте, Bell, Вы писали:

B>Память не освобождается, т.е. после вызова clear() capacity остается какой и была.

А каким образом можно уменьшить capacity? Потому что я думал, что resize(0) поможет, но не помогло...
Re[6]: std::vector<CMy> Как очистить???
От: ssm Россия  
Дата: 12.03.03 09:26
Оценка:
Здравствуйте, ingvarwolf, Вы писали:

I>Здравствуйте, Bell, Вы писали:


B>>Память не освобождается, т.е. после вызова clear() capacity остается какой и была.

I>А каким образом можно уменьшить capacity? Потому что я думал, что resize(0) поможет, но не помогло...

я же писал тут
Автор: ssm
Дата: 11.03.03
и здесь
Автор: ssm
Дата: 10.03.03
(с учетом того что сказал Каа
Автор: Kaa
Дата: 10.03.03
)
Re[2]: Re: std::vector<CMy> Как очистить???
От: Михаил Можаев Россия www.mozhay.chat.ru
Дата: 13.03.03 08:07
Оценка:
Здравствуйте, promko, Вы писали:


P>люди — давайте оптимизировать код:

>>
>>    list.push_back(CMy()); // только в случае наявности конструктора без параметров
>>


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

P>есть еще предложения по оптимизации ?


Если вновь добавляемые элементы инициализируются конструктором по умолчанию, то достаточно сделать resize:
list.resize(current_size + delta);
... << RSDN@Home 1.0 beta 5 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.