Mis on tavaline vahetustehing?

Arvutiprogrammeerimises ja arvutiteaduses on standardne vahetus olukord programmis, kus kahe muutuja väärtusi tuleb vahetada, mis nõuab kolmanda muutuja loomist, mis toimiks väärtuste ülekandmisel vahendajana. Standardne vahetus on programmeerimisparadigma, mis tähendab, et seda saab rakendada igas olukorras, kus on vaja vahetada kahte andmeosa, ja see ei ole seotud ühegi andmetüübi või programmeerimiskeelega. Programmides on palju juhtumeid, kus väärtusi tuleb vahetada, kuid sageli on see standardkomponent kogudes ja massiivides, kui seda kasutatakse sorteerimisalgoritmidega, mis peavad teisaldama üksusi kogu ühest registrist teise, kasutades ajutist muutujat väärtust vahetatakse. Riistvara vaatenurgast võib standardne vahetus olla mõne skalaarse andmetüübi (nt täisarvud) jaoks toetatud madala taseme protsessori funktsioon, mis tähendab, et kahe numbri vahetamiseks ei pea muutmälus (RAM) vaheväärtust looma.

Standardse swapi kontseptsiooni saab näha muutujatega A ja B; standardse vahetuse lõpus peaks B võrduma A-ga ja A peaks võrduma B-ga. Kui programm määrab B lihtsalt A-le, läheb A väärtus kaotsi ja seda ei saa hiljem B-le määrata. Selleks on vaja kasutada ajutine muutuja, mis hoiab A väärtust, samal ajal kui B on määratud A-le. Viimane samm on ajutise muutuja väärtuse määramine B-le, mis viib swapi lõpule.

Üks väga levinud rakendus standardse swapi jaoks on sorteerimisalgoritmi kasutamine massiivi või kogumi puhul. Kui sorteerimisalgoritm on kindlaks teinud, et massiivi indeksi 1 andmed tuleb vahetada indeksi 10 andmetega, saab teha andmete standardse vahetuse. Seda saab teha erakordselt kiiresti, kasutades osuti viiteid sellistes keeltes nagu C.

Mõnes objektorienteeritud programmeerimiskeeles võib tekkida tüsistus, kui kaks objekti eksemplari tuleb vahetada. Mõnel väga harvadel juhtudel ei algata lihtsalt objektiviidete vahetamine tegelikku vahetust. Selle asemel on ainus viis objektide vahetamiseks kloonida siseandmed väljade kaupa kahe objekti ja ajutise objektimuutuja vahel.

On üks tehnika, mida saab tehniliselt kasutada standardse vahetuse tegemiseks, kasutades eksklusiivset või (XOR) loogilist operaatorit. XOR-vahetus põhineb asjaolul, et kui kaks bitti arvutatakse XOR-iga, loovad need sisuliselt maski, mida saab ühe või mõlema operaatoriga ümber pöörata. Sel viisil saab kahte muutujat A ja B vahetada, luues esmalt maski kahe muutuja XOR-iga, seejärel kasutades XOR-i, et paljastada esmalt B väärtus ja seejärel A väärtus. Kahjuks, kuigi see meetod väldib ajutise muutuja loomisel ei tee see ka vahetust kõigil juhtudel, eriti kui A ja B on üksteisega võrdsed ja juhtudel, kui kompilaatori optimeerimine võib tegelikku toimingut muuta.