C ++ Std Swap

C Std Swap



“Hoán đổi là hành vi trao đổi hai hay nhiều thứ. Dữ liệu giữa hai biến trong lập trình có thể được chuyển đổi. Có thể trao đổi mọi thứ giữa hai người trong cuộc sống thực. Bất kỳ giá trị nào của hai đối tượng đều có thể được hoán đổi bằng cách sử dụng hàm swap () của thư viện chuẩn trong C ++. Nó đã được đặt dưới tiêu đề 'tiện ích' trong C11. Hàm swap () trong C ++ có độ phức tạp là N đối với mảng vì mỗi phần tử phải được hoán đổi riêng lẻ, trong khi độ khó của hàm đối với hằng số là không đổi. Hàm swap () đưa ra cảnh báo hoặc lỗi nếu bất kỳ phần tử nào của biến bị lỗi. Nhìn vào chữ ký của hàm cho std :: swap () bên dưới:

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 ] ) ;
( 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 ] ) ;

( int tôi : arr ) {
std :: cout << tôi << '' ;
}

trở về 0 ;
}

Bằng cách nhập tệp tiêu đề , chúng ta có thể truy cập chức năng hoán đổi trong chương trình của mình. Ở đây, chúng tôi đã bao gồm tệp tiêu đề với hai thư viện quan trọng hơn. Sau đó, chúng ta đã thiết lập phương thức int main. Bên trong chương trình chính, chúng tôi đã khai báo vectơ bằng cách tạo biến “arr.” Biến “arr” được khởi tạo với năm phần tử của số nguyên. Các vị trí chỉ mục được gán cho “i” và “j” để hoán đổi. Các biến “i” và “j” sau đó được chuyển đến phương thức std :: swap để hoán đổi giá trị của chỉ mục được chỉ định. Với vòng lặp for, chúng tôi đã in các mảng được hoán đổi.

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 ) ;
( 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.

#include

sử 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.