Не думаю, что это хорошая идея. Автору вопроса нужно очистить вектор перед следующим заполнением. В этом случае неизбежно последуют реаллокэйты, что быстродействию никак не поможет. Использование clear тоже не решает всех проблем, но ИМХО все-таки эффективнее.
Здравствуйте, ssm, Вы писали:
ssm>Здравствуйте, Bell, Вы писали:
B>>Не думаю, что это хорошая идея. Автору вопроса нужно очистить вектор перед следующим заполнением.
ssm> Каюсь, провтыкал
Здравствуйте, Bell, Вы писали:
>Использование clear тоже не решает всех проблем
А каких проблем не решает использование clear? Я таких проблем не знаю , подскажите, плз.
Здравствуйте, ingvarwolf, Вы писали:
I>Здравствуйте, Bell, Вы писали:
>>Использование clear тоже не решает всех проблем I>А каких проблем не решает использование clear? Я таких проблем не знаю , подскажите, плз.
Память не освобождается, т.е. после вызова clear() capacity остается какой и была.
На такой код компилятор должен ругнуться: аргументом vector::swap является неконстантная ссылка. Инициализировать ее временным объектом — нехорошо (хотя VC дает, а вот GCC — зарубит).
I>>А каких проблем не решает использование clear? Я таких проблем не знаю , подскажите, плз. B>Память не освобождается, т.е. после вызова clear() capacity остается какой и была.
тады так:
//типа чистим
list.clear();
//заполняем
...
//освободим лишнюю память(если это так надо)
{
std::vector<CMy> dummy;
dummy.swap(list);
list.swap(dummy);
}
Здравствуйте, Bell, Вы писали:
B>Память не освобождается, т.е. после вызова clear() capacity остается какой и была.
А каким образом можно уменьшить capacity? Потому что я думал, что resize(0) поможет, но не помогло...
Здравствуйте, ingvarwolf, Вы писали:
I>Здравствуйте, Bell, Вы писали:
B>>Память не освобождается, т.е. после вызова clear() capacity остается какой и была. I>А каким образом можно уменьшить capacity? Потому что я думал, что resize(0) поможет, но не помогло...
>> list.push_back(CMy()); // только в случае наявности конструктора без параметров
>>
А причем здесь неявность конструктора без параметров? Может быть имеется в виду наличие конструктора по умолчанию? Если его не будет, компилятор выдаст ошибку. А если такой конструктор есть, то все в порядке и неважно, неявный он или определенный пользователем.
P>есть еще предложения по оптимизации ?
Если вновь добавляемые элементы инициализируются конструктором по умолчанию, то достаточно сделать resize: