Есть ли встроенная функция 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 работает без третьей переменной, но это проблематично в двух направлениях:
- переменные должны быть различны, т. е. swap(&a, &a) не будет работать.
- это медленнее в целом.
иногда может быть предпочтительнее использовать своп XOR, если использование третьей переменной приведет к тому, что стек выкладывай, но обычно ты не в том положении, чтобы звонить.
чтобы ответить на ваш вопрос напрямую, нет никакой функции подкачки в стандартном C, хотя было бы тривиально писать.
если вы хотите C solotion, а не C++ один, вы можете сделать его макросом, по крайней мере, используя расширение GCC, чтобы он был достаточно общим, что-то вроде
остерегайтесь трюков, таких как заклинания swap(t[i++],i) ; чтобы избежать их, используйте оператор адресу & . И вам лучше использовать временный (для целых чисел есть известный и бесполезный трюк с exclusive-or).
PS: я использую две локальные переменные _x и _y (но я мог бы использовать только одну локальную переменную) для лучшей читаемости, а также, возможно, для включения дополнительных оптимизаций компилятора.