Cú pháp:
mẫu < lớp T > vô hiệu tráo đổi ( T & biến_1 , T & biến_2 ) ;Cả giá trị của biến đầu tiên và biến thứ hai, cả hai đều lưu trữ các giá trị, sẽ được hoán đổi. Hàm chỉ chuyển đổi giá trị của các biến; nó không có đầu ra. ”
Hoạt động của hàm swap () trong C ++
Chức năng hoán đổi được thực hiện trong C ++ bằng cách sử dụng ba dòng sau.
Mẫu vô hiệu tráo đổi ( T & tôi , T & j ) {
T temp = std :: di chuyển ( tôi ) ;
tôi = std :: di chuyển ( j ) ;
j = std :: di chuyển ( nhiệt độ ) ;
}
Câu lệnh “T temp = std :: move (i)”; tạo một bản sao của phần tử “i” và sao chép nó. Đây, “i = std :: move (j)”; loại bỏ các mục gốc của “i” và lưu trữ bản sao “i” của “j” thay cho “j” ban đầu. Công thức “j = std :: move (temp)”; lưu “i” với một bản sao tạm thời và xóa nội dung giống hệt của tạm thời. Ngoài ra, Xóa biến tạm thời sau khi thực hiện xong hàm swap ().
Ví dụ 1: Chương trình Sử dụng Phương thức std :: move để Hoán đổi
Như được minh họa bên dưới, chúng ta có thể hoán đổi hai đối tượng bằng cách sử dụng tính năng C ++ 11 std :: move.
#include
#include
mẫu
vô hiệu tráo đổi ( T & một , T & b )
{
T temp = std :: di chuyển ( một ) ;
một = std :: di chuyển ( b ) ;
b = std :: di chuyển ( nhiệt độ ) ;
}
int chính ( )
{
std :: vectơ danh sách = { 10 , 12 , 13 , mười lăm , 16 , 17 } ;
int tôi = 3 , j = 5 ;
tráo đổi ( danh sách [ tôi ] , danh sách [ j ] ) ;
vì ( int tôi : danh sách ) {
std :: cout << tôi << '' ;
}
trở về 0 ; }
Chúng ta có một khai báo mẫu có đối tượng “T”. Sau đó, chúng tôi đã thiết lập chức năng là “hoán đổi”. Hàm nhận hai tham số & a và & b, kiểu “T”. Do các đối số T & a, T & b tham chiếu hoặc lưu trữ địa chỉ của biến được truyền và áp dụng trực tiếp cho chúng mà không cần trả về, hàm swap (T & a, T & b) được gọi là lệnh gọi tham chiếu.
Bên trong void swap, chúng tôi đã áp dụng thuật toán hoán đổi bằng cách sử dụng phương thức std :: move. Sau đó, chúng tôi xây dựng chương trình chính. Ở đây, chúng ta đã khai báo biến “list” và khởi tạo nó với danh sách các giá trị số. Chúng tôi đã đặt các giá trị cho chữ “i” và “j” để hoán đổi. Giá trị số nằm ở chỉ mục thứ hai đã được thay thế bằng giá trị số ở chỉ mục thứ năm. Sau đó, chúng tôi gọi hàm hoán đổi và chuyển chỉ mục “i” và “j” cho nó để hoán đổi. Vòng lặp for được sử dụng để in danh sách đã hoán đổi.
Đầu ra hiển thị danh sách đã sửa đổi. Bạn có thể quan sát danh sách mới được tạo ra đã hoán đổi giá trị theo các chỉ mục được chỉ định.
Ví dụ 2: Chương trình sử dụng phương pháp std :: swap để hoán đổi
Sử dụng cơ chế std :: swap được tìm thấy trong tiêu đề tiện ích (trong C ++ 11) là cách khắc phục thông thường. Giá trị của hai đối tượng được chuyển đổi để làm cho nó hoạt động.
#include#include
#include
int chính ( )
{
std :: vectorarr = { 3 , 6 , 9 , mười lăm , 13 } ;
int tôi = 3 , j = 4 ;
std :: tráo đổi ( arr [ tôi ] , arr [ j ] ) ;
vì ( int tôi : arr ) {
std :: cout << tôi << '' ;
}
trở về 0 ;
}
Bằng cách nhập tệp tiêu đề
Danh sách thu được sau hoạt động hoán đổi bằng cách sử dụng phương thức std :: swap được hiển thị như sau:
Ví dụ 3: Chương trình Sử dụng Phương thức std :: iter_swap để Hoán đổi
Sử dụng thuật toán std :: iter_swap, được liệt kê trong tiêu đề cho thuật toán, là một tùy chọn bổ sung. Cách nó hoạt động là chuyển đổi các giá trị của các đối tượng mà các trình vòng lặp được cung cấp trỏ tới.
#include#include
#include
#include
int chính ( )
{
std :: vectorvec = { 64 , 61 , 62 , 63 , 60 } ;
int tôi = 0 , j = 4 ;
Tự động itr1 = std :: tiếp theo ( một vật. bắt đầu ( ) , tôi ) ;
Tự động itr2 = std :: tiếp theo ( một vật. bắt đầu ( ) , j ) ;
std :: iter_swap ( itr1 , itr2 ) ;
vì ( int tôi : một vật ) {
std :: cout << tôi << '' ;
}
trở về 0 ;
}
Đối với phương thức chính của chương trình, chúng tôi đã khai báo một biến vectơ “vec” và gán cho nó một danh sách số vectơ. Sau đó, chúng tôi chỉ định vị trí chỉ mục cho biến “i” và “j”. Phương thức std :: iter_swap được gọi để lấy iter1 và iter2 làm đối số. Iter1 và iter2 được khai báo với từ khóa auto và có hoạt động lặp. Phương thức vòng lặp for in ra các giá trị được hoán đổi của mảng vectơ khi thực thi.
Phương thức std :: iter_swap đã hoán đổi thành công các giá trị của các vectơ được chỉ định.
Ví dụ 4: Chương trình sử dụng không có biến tạm thời để hoán đổi
Ví dụ này cho thấy một cách mới để hoán đổi số trong mã C ++ mà không cần sử dụng các biến tạm thời.
#includesử dụng không gian tên std ;
int chính ( )
{
int x1 = hai , x2 = 12 ;
cout << 'Trước khi hoán đổi.' << endl ;
cout << 'x1 =' << x1 << ', x2 =' << x2 << endl ;
x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;
cout << ' \N Sau khi hoán đổi. ' << endl ;
cout << 'x1 =' << x1 << ', x2 =' << x2 << endl ;
trở về 0 ; }
Hãy kiểm tra hoạt động của chương trình này. Ở đây, chúng tôi đã khai báo x1 và x2, ban đầu được đặt với số tương ứng. Sau đó, sử dụng công thức x1 = x1 + x2, chúng ta thêm x1 và x2 và đặt kết quả là x1. Điều này chỉ ra rằng x1 bằng 2 cộng với 12. Do đó, bây giờ bằng 14. Sau đó, chúng ta áp dụng công thức x2 = x1 - x2. Điều này chỉ ra rằng x2 = 14 - 12. Do đó, x2 bây giờ bằng 2. Một lần nữa, chúng ta áp dụng công thức x1 = x1 - x2. Điều này chỉ ra rằng x1 = 14 - 2. Do đó, x1 = 12 ở cuối. Kết quả là, các đầu số đã được chuyển đổi.
Số được hoán đổi trước và sau được hiển thị trên màn hình nhắc sau.
Sự kết luận
Ở đây, chúng ta xem qua mô tả đầy đủ về swap () trong C ++, cách sử dụng của nó và một số ví dụ cho thấy nó hoạt động như thế nào. Bằng cách sử dụng hàm std :: swap (), giá trị của hai biến có thể được chuyển đổi. C ++ STL bao gồm một hàm dựng sẵn được gọi là std :: swap (). Hàm swap (T & biến 1, T & biến 2) gọi bằng tham chiếu và hàm swap () quá tải trong C ++ tùy thuộc vào loại biến dữ liệu cũng được giải thích trong hướng dẫn này.