Swap c что это
Перейти к содержимому

Swap c что это

Есть ли встроенная функция swap в C?

есть ли встроенная функция swap в C, которая работает без использования третьей переменной?

11 ответов

нет.
В C++, но он работает как c = a;a = b; b = c;
C++ встроенная функция swap: swap(first,second);
Проверьте это: http://www.cplusplus.com/reference/algorithm/swap/

вы можете использовать это для замены двух значений переменных без использования третьей переменной:

вы также можете проверить это:

почему вы не хотите использовать третью переменную? Это самый быстрый способ на подавляющем большинстве архитектур.

на алгоритм подкачки XOR работает без третьей переменной, но это проблематично в двух направлениях:

  1. переменные должны быть различны, т. е. swap(&a, &a) не будет работать.
  2. это медленнее в целом.

иногда может быть предпочтительнее использовать своп XOR, если использование третьей переменной приведет к тому, что стек выкладывай, но обычно ты не в том положении, чтобы звонить.

чтобы ответить на ваш вопрос напрямую, нет никакой функции подкачки в стандартном C, хотя было бы тривиально писать.

если вы хотите C solotion, а не C++ один, вы можете сделать его макросом, по крайней мере, используя расширение GCC, чтобы он был достаточно общим, что-то вроде

остерегайтесь трюков, таких как заклинания swap(t[i++],i) ; чтобы избежать их, используйте оператор адресу & . И вам лучше использовать временный (для целых чисел есть известный и бесполезный трюк с exclusive-or).

PS: я использую две локальные переменные _x и _y (но я мог бы использовать только одну локальную переменную) для лучшей читаемости, а также, возможно, для включения дополнительных оптимизаций компилятора.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *