чем отличается resize(0) от clear()?
От: Srv  
Дата: 05.10.07 08:31
Оценка:
Всем привет!
Есть вектор как наиболее эффективно (быстрее) его очистить? В векторе очень много элементов. Что лучше resize(0) или clear()? Интересует конкретно очистка вектора, про swap я знаю...
Спасибо!
Re: чем отличается resize(0) от clear()?
От: jazzer Россия Skype: enerjazzer
Дата: 05.10.07 08:35
Оценка:
Здравствуйте, Srv, Вы писали:

Srv>Всем привет!

Srv>Есть вектор как наиболее эффективно (быстрее) его очистить? В векторе очень много элементов. Что лучше resize(0) или clear()? Интересует конкретно очистка вектора, про swap я знаю...
Srv>Спасибо!

из стандарта:

a.clear(): void erase(begin(), end())
post: size() == 0.


void resize(size_type sz, T c = T());
6 Effects:
if (sz > size()) insert(end(), sz-size(), c);
else if (sz < size()) erase(begin()+sz, end());
else; //do nothing

jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: чем отличается resize(0) от clear()?
От: Srv  
Дата: 05.10.07 09:23
Оценка:
Здравствуйте, jazzer, Вы писали:

J>из стандарта:

J>

J>a.clear(): void erase(begin(), end())
J>post: size() == 0.


J>

J>void resize(size_type sz, T c = T());
J>6 Effects:
J>if (sz > size()) insert(end(), sz-size(), c);
J>else if (sz < size()) erase(begin()+sz, end());
J>else; //do nothing



одно и тоже чтоли? а я вот заметил что если вызвать resize(0) то capacity() вернет то что было до этого, а если clear() то capacity() вернет 0...
Re[3]: чем отличается resize(0) от clear()?
От: Roman Odaisky Украина  
Дата: 05.10.07 09:33
Оценка:
Здравствуйте, Srv, Вы писали:

Srv>одно и тоже чтоли? а я вот заметил что если вызвать resize(0) то capacity() вернет то что было до этого, а если clear() то capacity() вернет 0...


AFAIU, das ist баг, capacity никогда не должна уменьшаться.
До последнего не верил в пирамиду Лебедева.
Re[3]: чем отличается resize(0) от clear()?
От: jazzer Россия Skype: enerjazzer
Дата: 05.10.07 09:38
Оценка:
Здравствуйте, Srv, Вы писали:

Srv>одно и тоже чтоли? а я вот заметил что если вызвать resize(0) то capacity() вернет то что было до этого, а если clear() то capacity() вернет 0...


да, одно и то же.

то, что ты наблюдаешь — это самодеятельность твоей реализации.
по стандарту capacity может только расти, по крайней мере, я не вижу, как бы она могла уменьшиться (за исключением swap, естественно)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: чем отличается resize(0) от clear()?
От: Srv  
Дата: 05.10.07 09:38
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

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


Srv>>одно и тоже чтоли? а я вот заметил что если вызвать resize(0) то capacity() вернет то что было до этого, а если clear() то capacity() вернет 0...


RO>AFAIU, das ist баг, capacity никогда не должна уменьшаться.


прикольный баг, компилер Microsoft Visual C++ .NET 2003 ver 7.1.3088
stl
/*
* Copyright (c) 1992-2002 by P.J. Plauger. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
*/
Re[3]: чем отличается resize(0) от clear()?
От: Bell Россия  
Дата: 05.10.07 10:15
Оценка:
Здравствуйте, Srv, Вы писали:

Srv>одно и тоже чтоли? а я вот заметил что если вызвать resize(0) то capacity() вернет то что было до этого, а если clear() то capacity() вернет 0...


Если интересно, то здесь
Автор: korzhik
Дата: 16.06.05
эта тема уже обсуждалась.
Любите книгу — источник знаний (с) М.Горький
Re: чем отличается resize(0) от clear()?
От: ilnar Россия  
Дата: 05.10.07 16:43
Оценка:
Здравствуйте, Srv, Вы писали:

Srv>Всем привет!

Srv>Есть вектор как наиболее эффективно (быстрее) его очистить? В векторе очень много элементов. Что лучше resize(0) или clear()? Интересует конкретно очистка вектора, про swap я знаю...
Srv>Спасибо!

если ты хочешь освободить память, то так:
{} должны быть реально scoped

vector forclean;
....
{
    vector tmp;
    forclean.swap(tmp);
}


vector forclean;
....
{
    vector tmp;
    swap(forclean, tmp);
}


vector forclean;
....
swap(forclean, vector());
Re[2]: Внимание, вопрос!
От: 0xDEADBEEF Ниоткуда  
Дата: 05.10.07 19:31
Оценка: :)
Здравствуйте, ilnar, Вы писали:

I>vector forclean;
I>....
I>swap(forclean, vector());

Что в этом коде неправильно?
__________
16.There is no cause so right that one cannot find a fool following it.
Re[3]: Внимание, вопрос!
От: Аноним  
Дата: 05.10.07 20:13
Оценка:
Очевидно, попытка взять неконстантную ссылку на временный объект.

DEA>
I>>vector forclean;
I>>....
I>>swap(forclean, vector());
DEA>

DEA>Что в этом коде неправильно?
Re[2]: чем отличается resize(0) от clear()?
От: ilnar Россия  
Дата: 05.10.07 23:34
Оценка:
Здравствуйте, ilnar, Вы писали:

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


Srv>>Всем привет!

Srv>>Есть вектор как наиболее эффективно (быстрее) его очистить? В векторе очень много элементов. Что лучше resize(0) или clear()? Интересует конкретно очистка вектора, про swap я знаю...
Srv>>Спасибо!

I>если ты хочешь освободить память, то так:

I>{} должны быть реально scoped

I>
I>vector forclean;
I>....
I>{
I>    vector tmp;
I>    forclean.swap(tmp);
I>}
I>


I>
I>vector forclean;
I>....
I>{
I>    vector tmp;
I>    swap(forclean, tmp);
I>}
I>


I>
I>vector forclean;
I>....
I>swap(forclean, vector());
I>



Упс! забыл указать шаблонные параметры vector<тут нужный тип>
И правильно указали ошибку на последнем коде, накосящил со взятием неконстантной ссылки.
и как всегда VC8sp1 на высоте: скушал последний пример без ругани (((
Re[2]: чем отличается resize(0) от clear()?
От: Srv  
Дата: 06.10.07 08:08
Оценка:
Здравствуйте, ilnar, Вы писали:

I>если ты хочешь освободить память, то так:

I>{} должны быть реально scoped

I>
I>vector forclean;
I>....
I>{
I>    vector tmp;
I>    forclean.swap(tmp);
I>}
I>


I>
I>vector forclean;
I>....
I>{
I>    vector tmp;
I>    swap(forclean, tmp);
I>}
I>


I>
I>vector forclean;
I>....
I>swap(forclean, vector());
I>


Я же написал что мне надо не освободить память, а очистить вектор!
Re[3]: чем отличается resize(0) от clear()?
От: ilnar Россия  
Дата: 06.10.07 08:33
Оценка:
Здравствуйте, Srv, Вы писали:


Srv>Я же написал что мне надо не освободить память, а очистить вектор!


тогда clear, по его функциональному предназначению
Re[2]: чем отличается resize(0) от clear()?
От: Roman Odaisky Украина  
Дата: 06.10.07 08:55
Оценка: 1 (1)
Здравствуйте, ilnar, Вы писали:

I>если ты хочешь освободить память, то так:

I>{} должны быть реально scoped

std::vector<X>().swap(forClean);

или даже так:
template <class Swappable>
void reset(Swappable& x)
{
    Swappable tmp((Swappable()));
    std::swap(x, tmp);
}
До последнего не верил в пирамиду Лебедева.
Re[3]: чем отличается resize(0) от clear()?
От: Sergey Chadov Россия  
Дата: 06.10.07 11:10
Оценка:
Здравствуйте, ilnar, Вы писали:


I>и как всегда VC8sp1 на высоте: скушал последний пример без ругани (((


??
    std::vector<int> forclean;
    swap(forclean, std::vector<int>());


/W4:

f:\projects\msvc8\dozdr\dozdr\dozdr.cpp(22) : warning C4239: nonstandard extension used : 'argument' : conversion from 'std::vector<_Ty>' to 'std::vector<_Ty> &'
with
[
_Ty=int
]
A non-const reference may only be bound to an lvalue


/Za:

f:\projects\msvc8\dozdr\dozdr\dozdr.cpp(22) : error C2665: 'std::swap' : none of the 2 overloads could convert all the argument types
n:\program files\microsoft visual studio 8\vc\include\utility(16): could be 'void std::swap<std::vector<_Ty>>(std::vector<_Ty> &,std::vector<_Ty> &)' [found using argument-dependent lookup]
with
[
_Ty=int
]
n:\program files\microsoft visual studio 8\vc\include\vector(1309): or 'void std::swap<int,std::allocator<_Ty>>(std::vector<_Ty> &,std::vector<_Ty> &)' [found using argument-dependent lookup]
with
[
_Ty=int
]
while trying to match the argument list '(std::vector<_Ty>, std::vector<_Ty>)'
with
[
_Ty=int
]

--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[4]: чем отличается resize(0) от clear()?
От: ilnar Россия  
Дата: 06.10.07 11:21
Оценка:
Здравствуйте, Sergey Chadov, Вы писали:

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



I>>и как всегда VC8sp1 на высоте: скушал последний пример без ругани (((


SC>??

SC>
SC>    std::vector<int> forclean;
SC>    swap(forclean, std::vector<int>());
SC>


SC>/W4:


SC>/Za:


круто! а где узнать перечень всех этих волшебных ключей?
есть ли стандартные методы задачть выбором галочек, а не "шифрокодов"?
Re[5]: чем отличается resize(0) от clear()?
От: Sergey Chadov Россия  
Дата: 06.10.07 11:27
Оценка:
Здравствуйте, ilnar, Вы писали:


I>круто! а где узнать перечень всех этих волшебных ключей?

I>есть ли стандартные методы задачть выбором галочек, а не "шифрокодов"?

Конечно.

Configuration Properties\C/C++\General\Warning Level = Level 4(/W4)
Configuration Properties\C/C++\Language\Disable Language Extensions = Yes(/Za)
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[6]: чем отличается resize(0) от clear()?
От: ilnar Россия  
Дата: 06.10.07 13:00
Оценка:
Здравствуйте, Sergey Chadov, Вы писали:

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



I>>круто! а где узнать перечень всех этих волшебных ключей?

I>>есть ли стандартные методы задачть выбором галочек, а не "шифрокодов"?

SC>Конечно.


SC>Configuration Properties\C/C++\General\Warning Level = Level 4(/W4)

SC>Configuration Properties\C/C++\Language\Disable Language Extensions = Yes(/Za)

эти я видел. хотелось бы узнать больше про всякие параметры настройки, на что каждый из них влияет. какой уровень что ловит, траляля, траляля
Re[7]: чем отличается resize(0) от clear()?
От: Sergey Chadov Россия  
Дата: 06.10.07 13:46
Оценка:
Здравствуйте, ilnar, Вы писали:


I>эти я видел. хотелось бы узнать больше про всякие параметры настройки, на что каждый из них влияет. какой уровень что ловит, траляля, траляля


Ну в описании каждого варнинга в МСДН написано какого он уровня, а вот наоборот не видел.
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[8]: чем отличается resize(0) от clear()?
От: ilnar Россия  
Дата: 06.10.07 14:17
Оценка:
Здравствуйте, Sergey Chadov, Вы писали:

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



I>>эти я видел. хотелось бы узнать больше про всякие параметры настройки, на что каждый из них влияет. какой уровень что ловит, траляля, траляля


SC>Ну в описании каждого варнинга в МСДН написано какого он уровня, а вот наоборот не видел.


значит надо как-то составить обратное, надо подумать, интересная задача для мозгов
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.