Блог пользователя Madiyar

Автор Madiyar, история, 11 лет назад, По-английски

Small brainteaser. Do you know that function below doesn't work in some cases.
Try to attack it.

#include <iostream>

using namespace std;

void swap(int &a, int &b){ 
	a = a + b; 
	b = a - b; 
	a = a - b;
}
  • Проголосовать: нравится
  • +55
  • Проголосовать: не нравится

»
11 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +42 Проголосовать: не нравится

attempt in edit.

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +37 Проголосовать: не нравится

do you mean the overflow, when a + b > 2^31 — 1

»
11 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +16 Проголосовать: не нравится

do not work if *a == *b

even it occurs overflow, it works well

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +23 Проголосовать: не нравится

int a=12; swap(a,a);

»
11 лет назад, скрыть # |
Rev. 13  
Проголосовать: нравится +1 Проголосовать: не нравится

best swap function without overflows :)

void swap (int &a, int &b){ 
  if (&a != &b ) { 
	a ^= b; 
	b ^= a; 
	a ^= b;
      }
}
why downvotes ? :D epic 
»
11 лет назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится

that's why Mozilla created Rust. In this language any attempt to call swap(a, a) will lead to compile-time error. Prooflink: http://is.gd/m65CVw