C++ Std Swap

C Std Swap



«Η ανταλλαγή είναι η πράξη της ανταλλαγής δύο ή περισσότερων πραγμάτων. Τα δεδομένα μεταξύ δύο μεταβλητών στον προγραμματισμό μπορούν να αλλάξουν. Η ανταλλαγή πραγμάτων μεταξύ δύο προσώπων είναι δυνατή στην πραγματική ζωή. Οι τιμές οποιωνδήποτε δύο αντικειμένων μπορούν να αντικατασταθούν χρησιμοποιώντας την τυπική συνάρτηση βιβλιοθήκης swap() στη C++. Τοποθετήθηκε κάτω από την κεφαλίδα 'uility' στο C11. Η συνάρτηση swap() στη C++ έχει πολυπλοκότητα N για πίνακες επειδή κάθε στοιχείο πρέπει να ανταλλάσσεται ξεχωριστά, ενώ η δυσκολία της συνάρτησης για σταθερές είναι σταθερή. Η συνάρτηση swap() εκπέμπει μια προειδοποίηση ή ένα σφάλμα εάν κάποιο από τα στοιχεία της μεταβλητής αποτύχει. Δείτε την υπογραφή της συνάρτησης για std::swap() παρακάτω:

Σύνταξη:

πρότυπο < τάξη Τ > κενός ανταλαγή ( Τ & μεταβλητή_1 , Τ & μεταβλητή_2 ) ;

Τόσο η τιμή της πρώτης μεταβλητής όσο και η δεύτερη μεταβλητή, και οι δύο τιμές αποθήκευσης, πρέπει να ανταλλάσσονται. Η συνάρτηση απλώς αλλάζει τις τιμές των μεταβλητών. δεν έχει έξοδο».







Εργασία της συνάρτησης swap() σε C++

Η συνάρτηση swap υλοποιείται στη C++ χρησιμοποιώντας τις ακόλουθες τρεις γραμμές.



Πρότυπο κενός ανταλαγή ( Τ & Εγώ , Τ & ι ) {
Τ θερμοκρασία = std :: κίνηση ( Εγώ ) ;
Εγώ = std :: κίνηση ( ι ) ;
ι = std :: κίνηση ( θερμοκρασία ) ;
}

Η δήλωση 'T temp = std::move(i)'; δημιουργεί ένα αντίγραφο του στοιχείου 'i' και το αντιγράφει. Εδώ, 'i = std::move(j)'; απορρίπτει τα πρωτότυπα στοιχεία του 'i' και αποθηκεύει το αντίγραφο 'i' του 'j' στη θέση του αρχικού 'j'. Ο τύπος “j = std:: move(temp)”; αποθηκεύστε το 'i' με έναν κλώνο της θερμοκρασίας και αφαιρέστε τα ίδια περιεχόμενα της θερμοκρασίας. Επίσης, διαγράψτε τη μεταβλητή temp αφού ολοκληρωθεί η εκτέλεση της συνάρτησης swap().



Παράδειγμα 1: Πρόγραμμα με χρήση της μεθόδου std::move σε Swap

Όπως αποδεικνύεται παρακάτω, μπορούμε να ανταλλάξουμε δύο αντικείμενα χρησιμοποιώντας τη δυνατότητα C++11 std::move.





#include

#include <διάνυσμα>



πρότυπο
κενός ανταλαγή ( Τ & ένα , Τ & σι )
{
Τ θερμοκρασία = std :: κίνηση ( ένα ) ;
ένα = std :: κίνηση ( σι ) ;
σι = std :: κίνηση ( θερμοκρασία ) ;
}
ενθ κύριος ( )
{
std :: διάνυσμα λίστα = { 10 , 12 , 13 , δεκαπέντε , 16 , 17 } ;
ενθ Εγώ = 3 , ι = 5 ;
ανταλαγή ( λίστα [ Εγώ ] , λίστα [ ι ] ) ;
Για ( ενθ Εγώ : λίστα ) {
std :: cout << Εγώ << '' ;
}
ΕΠΙΣΤΡΟΦΗ 0 ; }

Έχουμε μια δήλωση προτύπου που έχει αντικείμενο 'T'. Μετά από αυτό, έχουμε καθιερώσει τη λειτουργία ως 'swap'. Η συνάρτηση παίρνει τις δύο παραμέτρους &a και &b, τύπου 'T'. Ως αποτέλεσμα των ορισμάτων T& a, T&b που αναφέρονται ή αποθηκεύουν τη διεύθυνση της μεταβλητής που έχει περάσει και εφαρμόζεται απευθείας σε αυτές χωρίς επιστροφή, η συνάρτηση swap(T& a, T&b) ονομάζεται κλήση μέσω αναφοράς.



Μέσα στο void swap, έχουμε εφαρμόσει τον αλγόριθμο της εναλλαγής χρησιμοποιώντας τη μέθοδο std::move. Στη συνέχεια, κατασκευάσαμε τα κύρια προγράμματα. Εδώ, έχουμε δηλώσει τη μεταβλητή 'list' και την αρχικοποιήσαμε με τη λίστα των αριθμητικών τιμών. Έχουμε ορίσει τις τιμές για το 'i' και το 'j' για την εναλλαγή. Η αριθμητική τιμή που βρίσκεται στο δεύτερο ευρετήριο αντικαταστάθηκε με την αριθμητική τιμή στον πέμπτο δείκτη. Στη συνέχεια, καλέσαμε τη συνάρτηση swap και της δώσαμε τα ευρετήρια 'i' και 'j' για εναλλαγή. Ο βρόχος for χρησιμοποιείται για την εκτύπωση της λίστας που ανταλλάχθηκε.

Η έξοδος εμφανίζει την τροποποιημένη λίστα. Μπορείτε να παρατηρήσετε ότι η νέα λίστα που δημιουργήθηκε αντάλλαξε την τιμή σύμφωνα με καθορισμένα ευρετήρια.

Παράδειγμα 2: Πρόγραμμα με χρήση της μεθόδου std::swap για εναλλαγή

Η χρήση του μηχανισμού std::swap που βρίσκεται στην κεφαλίδα του βοηθητικού προγράμματος (στην C++11) είναι η συνηθισμένη λύση. Οι τιμές δύο αντικειμένων αλλάζουν για να λειτουργήσει.

#include

#include <διάνυσμα>

#include



ενθ κύριος ( )
{
std :: vectorarr = { 3 , 6 , 9 , δεκαπέντε , 13 } ;
ενθ Εγώ = 3 , ι = 4 ;

std :: ανταλαγή ( αρ [ Εγώ ] , αρ [ ι ] ) ;

Για ( ενθ Εγώ : αρ ) {
std :: cout << Εγώ << '' ;
}

ΕΠΙΣΤΡΟΦΗ 0 ;
}

Εισάγοντας το αρχείο κεφαλίδας , μπορούμε να έχουμε πρόσβαση στη συνάρτηση swap στο πρόγραμμά μας. Εδώ, έχουμε συμπεριλάβει το αρχείο κεφαλίδας με δύο ακόμη σημαντικές βιβλιοθήκες. Στη συνέχεια, δημιουργήσαμε τη μέθοδο int main. Μέσα στο main του προγράμματος, έχουμε δηλώσει το διάνυσμα δημιουργώντας τη μεταβλητή 'arr'. Η μεταβλητή 'arr' αρχικοποιείται με τα πέντε στοιχεία του ακέραιου αριθμού. Οι θέσεις του δείκτη αντιστοιχίζονται στα 'i' και 'j' για εναλλαγή. Οι μεταβλητές 'i' και 'j' μεταβιβάζονται στη συνέχεια στη μέθοδο std::swap για την εναλλαγή της τιμής του καθορισμένου ευρετηρίου. Με τον βρόχο for, έχουμε εκτυπώσει τους ανταλλαγμένους πίνακες.

Η λίστα που λαμβάνεται μετά τη λειτουργία ανταλλαγής χρησιμοποιώντας τη μέθοδο std::swap εμφανίζεται ως εξής:

Παράδειγμα 3: Πρόγραμμα που χρησιμοποιεί τη μέθοδο std::iter_swap για εναλλαγή

Η χρήση του αλγόριθμου std::iter_swap, ο οποίος παρατίθεται στην κεφαλίδα του αλγόριθμου, είναι μια πρόσθετη επιλογή. Ο τρόπος που λειτουργεί είναι με την εναλλαγή των τιμών των αντικειμένων στα οποία δείχνουν οι παρεχόμενοι επαναλήπτες.

#include

#include <διάνυσμα>

#include

#include <αλγόριθμος>



ενθ κύριος ( )
{
std :: vectorvec = { 64 , 61 , 62 , 63 , 60 } ;
ενθ Εγώ = 0 , ι = 4 ;
αυτο itr1 = std :: Επόμενο ( ένα πράγμα. να αρχίσει ( ) , Εγώ ) ;
αυτο itr2 = std :: Επόμενο ( ένα πράγμα. να αρχίσει ( ) , ι ) ;

std :: iter_swap ( itr1 , itr2 ) ;
Για ( ενθ Εγώ : ένα πράγμα ) {
std :: cout << Εγώ << '' ;
}
ΕΠΙΣΤΡΟΦΗ 0 ;
}

Στην κύρια μέθοδο του προγράμματος, έχουμε δηλώσει μια διανυσματική μεταβλητή 'vec' και της αναθέσαμε μια διανυσματική λίστα αριθμών. Στη συνέχεια, καθορίσαμε τη θέση του δείκτη στη μεταβλητή «i» και «j». Καλείται η μέθοδος std::iter_swap που παίρνει τα iter1 και iter2 ως όρισμα. Τα iter1 και iter2 δηλώνονται με την αυτόματη λέξη-κλειδί και έχουν τη λειτουργία επανάληψης. Η μέθοδος βρόχου for εκτυπώνει τις ανταλλαγμένες τιμές του διανυσματικού πίνακα κατά την εκτέλεση.

Η μέθοδος std::iter_swap αντάλλαξε με επιτυχία τις τιμές των καθορισμένων διανυσμάτων.

Παράδειγμα 4: Πρόγραμμα χρήσης χωρίς προσωρινές μεταβλητές για εναλλαγή

Αυτό το παράδειγμα δείχνει έναν νέο τρόπο εναλλαγής αριθμών σε κώδικα C++ χωρίς τη χρήση προσωρινών μεταβλητών.

#include

χρησιμοποιώντας το namespace std ;

ενθ κύριος ( )
{
ενθ x1 = δύο , x2 = 12 ;
cout << «Πριν από την ανταλλαγή». << endl ;
cout << 'x1 =' << x1 << ', x2 = ' << x2 << endl ;

x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;

cout << ' \n Μετά την ανταλλαγή». << endl ;
cout << 'x1 =' << x1 << ', x2 = ' << x2 << endl ;

ΕΠΙΣΤΡΟΦΗ 0 ; }

Ας εξετάσουμε τη λειτουργία αυτού του προγράμματος. Εδώ, έχουμε δηλώσει x1 και x2, τα οποία ορίζονται αρχικά με τον αριθμό, αντίστοιχα. Στη συνέχεια, χρησιμοποιώντας τον τύπο x1 = x1+ x2, προσθέτουμε x1 και x2 και βάζουμε το αποτέλεσμα σε x1. Αυτό δείχνει ότι το x1 είναι ίσο με 2 συν 12. Επομένως, τώρα ισούται με 14. Στη συνέχεια, εφαρμόζουμε τον τύπο x2 = x1 – x2. Αυτό δείχνει ότι x2 = 14 – 12. Επομένως, το x2 είναι τώρα ίσο με 2. Για άλλη μια φορά, εφαρμόζουμε τον τύπο x1 = x1 – x2. Αυτό δείχνει ότι x1 = 14 – 2. Επομένως, x1 = 12 στο τέλος. Ως αποτέλεσμα, οι αριθμοί έχουν αλλάξει.

Ο αριθμός που ανταλλάχτηκε πριν και μετά εμφανίζεται στην ακόλουθη οθόνη προτροπής.

συμπέρασμα

Εδώ, εξετάζουμε μια πλήρη περιγραφή του swap() στη C++, τη χρήση του και μερικά παραδείγματα που δείχνουν πώς λειτουργεί. Χρησιμοποιώντας τη συνάρτηση std:: swap(), μπορούν να αλλάξουν οι τιμές δύο μεταβλητών. Το C++ STL περιλαμβάνει μια ενσωματωμένη συνάρτηση που ονομάζεται std::swap(). Η συνάρτηση swap(T& variable 1, T& variable 2) καλεί με αναφορά και η C++ overloads swap() ανάλογα με τον τύπο των μεταβλητών δεδομένων επεξηγούνται επίσης σε αυτό το σεμινάριο.