Със следния метод можем да разменим две променливи A
и B
A = A XOR B
B = A XOR B
A = A XOR B
Искам да внедря такъв метод в C++, който работи с всички типове (int, float, char, ...), както и структури. Както знаем, всички видове данни, включително структури, заемат определено място в паметта, например 4 байта, 8 байта
По мое мнение този метод за размяна трябва да работи с всички типове, с изключение на базирани на указател типове, той трябва да разменя съдържанието на паметта, тоест битове, на две променливи
Моят въпрос
Нямам идея как мога да внедря такъв метод в C++, който работи със структури (те не съдържат никакви указатели). Може ли някой да ми помогне?
std::swap(...)
. cplusplus.com/reference/algorithm/swap - person clstrfsck   schedule 13.06.2014std::swap( a, a )
. Алгоритъмът xor не работи в този случай и затова е безполезен като обща рутина за размяна. - person James Kanze   schedule 13.06.2014sizeof(class)
, ако приложите XOR трика към класа. Тъй като игнорира логическото съдържание на класа, трикът XOR няма да преследва управляваната памет, а просто ще размени указателите. - person cmaster - reinstate monica   schedule 13.06.2014sizeof(class)
= 10 Mb. Други екземпляри поддържат указатели към данни в този клас (по дизайн). Освен дълга работа, това може да навреди и на класовете. IMO, пропускането на оператори за преместване/копиране или оператори за присвояване по време на такъв обмен също е лоша идея. - person Spook   schedule 13.06.2014sizeof(class)
== 10 MB, правилният конструктор на движение трябва въпреки това да докосне всичките 10 MB. Преместването може да бъде по-бързо от копирането само ако има нещо, което не е включено в самия обект, т.е. д. разпределени в купчината. Но тук много се отклоняваме от темата. - person cmaster - reinstate monica   schedule 13.06.2014