Войти
ПрограммированиеФорумОбщее

Обмен значений переменных. (комментарии) (3 стр)

Страницы: 1 2 3 4 5 Следующая »
#30
18:20, 6 апр. 2011

Chipmunk
> А сложные проблемы все боятся обсуждать. Темы на три поста выходят.
+10308


#31
20:11, 6 апр. 2011

Alex the..
> по моему невозможно это сделать в принципе
> вот возьми два десятилитровых ведра,
> в одно налито три литра воды, в другое два
> и путем переливания из одного в другое, добейся того чтоб лишний литр перешел
> туда где изначально было два литра
>
> если сравнишь их объемы, все равно ведь разницу нужно где то запомнить
> короче не обойтись без где то сохраняемых результатов элементарных действий
> благо есть компилятор который все прячет, либо команды процессора, которые тоже
> на самом деле высокоуровневые
не правильно надо рассматривать на литрами а плотностями.
в одному сосуде жидкость с плотность 4 в другом 5. и тд....

Прошло более 2 лет
#32
22:41, 29 янв. 2014

MATov
> std::swap(a,b);
Так делать не желательно. Как минимум возможная потеря производительности из-за std::. Это не шутка.

Из новостей C++1y:

a:=:b;
Swap operator C++ пока не приняли.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3746.pdf
But who cares?

//sarcasm x64
register int a, b, t;
//...
c=a;
a=b;
b=c;
#33
22:58, 29 янв. 2014

c++11:
http://ideone.com/lItE1i
Можно и для большего количества аргументов
http://ideone.com/kTflBl

#34
23:04, 29 янв. 2014

laMer007

А угадай какой выхлоп будет у этого:

+ Показать

А вот какой:

+ Показать
И не надо выёживаться с "супер оптимизациями", гробокопатели )
#35
23:15, 29 янв. 2014

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

MATov
> супер оптимизациями
Это банальная, но работающая оптимизация. Думаю не хочется получить 3 копирования для тяжелого объекта вместо их перемещения. Особенно до С++11.

И да
laMer007
> //sarcasm x64
есть сарказм помноженный.
#36
23:26, 29 янв. 2014

laMer007
> Думаю не хочется получить 3 копирования для тяжелого объекта вместо их
> перемещения.
А какие проблемы с перемещением?

  template<typename _Tp>
    inline void
    swap(_Tp& __a, _Tp& __b)
#ifdef __GXX_EXPERIMENTAL_CXX0X__
    noexcept(__and_<is_nothrow_move_constructible<_Tp>,
              is_nothrow_move_assignable<_Tp>>::value)
#endif
    {
      // concept requirements
      __glibcxx_function_requires(_SGIAssignableConcept<_Tp>)

      _Tp __tmp = _GLIBCXX_MOVE(__a);
      __a = _GLIBCXX_MOVE(__b);
      __b = _GLIBCXX_MOVE(__tmp);
    }
#37
23:27, 29 янв. 2014

laMer007
> Думаю не хочется получить 3 копирования для тяжелого объекта вместо их перемещения. Особенно до С++11.

дык std::swap под 11ыми плюсами будет пытаться переместить же ж.
Ну и естественно нужно понимать как будет работать swap когда его пишешь, и это ни чем не лучше: "t=a;a=b;b=t;", ибо одно и тоже (если без 11ых плюсов)

#38
23:53, 29 янв. 2014

MATov
> swap ни чем не лучше: "t=a;a=b;b=t;",
неа, в общем случае лучше, особенно до 11 стандарта.

Hardcode
> А какие проблемы с перемещением?
до 11 - большие, а что интересует то?

#39
0:03, 30 янв. 2014

laMer007
> Думаю не хочется получить 3 копирования для тяжелого объекта вместо их
> перемещения.
Так чем swap не устраивает, если в с++11 он делает перемещение, а в 03 все равно перемещения нет?

#40
0:10, 30 янв. 2014

laMer007
> неа, в общем случае лучше, особенно до 11 стандарта.

и чем же лучше  "t=a;a=b;b=t;" чем swap ? до 11ого стандарта он делаешь тоже самое, в 11ом еще пытается перемещать к тому же.

#41
0:13, 30 янв. 2014

Hardcode
> а в 03 все равно перемещения нет?
В swap то? Иной раз есть "перемещение".

#42
0:22, 30 янв. 2014

laMer007
> В swap то? Иной раз есть.
На уровне языка перемещения нет. Если уж написал для своего класса какой-нибудь костыль, эмулирующий перемещение, то можно написать и специализацию для swap.

#43
0:26, 30 янв. 2014

MATov
> и чем же лучше "t=a;a=b;b=t;" чем swap ?
Отвечать на вопросы к чужим утверждениям я не вправе. Моё утверждение было в каком то смысле обратным.

#44
0:30, 30 янв. 2014

Hardcode
> то можно написать и специализацию для swap.
Ну наконец то! Начинаете думать. Осталось пол пути. Интересно пройдёте за столько же постов что и первую половину? По идеи должно быть гораздо быстрее.

И тут мы возвращаемся к моему утверждению из-за которого возродились обсуждения:

laMer007
> > std::swap(a,b);
> Так делать не желательно. Как минимум возможная потеря производительности из-за
> std::
в общем случае.

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.