std::swap_ranges
#include <algorithm>
template <class ForwardIterator1, class ForwardIterator2>
ForwardIterator2 swap_ranges (ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2);
Hoán đổi các phần tử giữa hai phạm vi (range) có cùng kích thước.
Tham số
first1
- Forward Iterator trỏ đến phần tử đầu tiên trong phạm vi thứ nhất.
last1
- Forward Iterator trỏ đến phần tử ngay sau phần tử cuối cùng trong phạm vi thứ nhất. Phạm vi thứ nhất là
[first1, last1)
.
first2
- Forward Iterator trỏ đến phần tử đầu tiên trong phạm vi thứ hai.
Giá trị trả về
- Forward Iterator trỏ đến phần tử ngay sau phần tử cuối cùng trong phạm vi thứ hai đã tham gia vào quá trình hoán đổi. Phạm vi thứ hai được hoán đổi bắt đầu từ
first2
và có cùng độ dài với phạm vi thứ nhất.
Đặc điểm
- Hai phạm vi phải có cùng độ dài. Nếu không, hành vi sẽ không xác định.
- Phạm vi thứ nhất
[first1, last1)
là "nửa mở", không bao gồm phần tửlast1
. swap_ranges()
sử dụng std::swap để hoán đổi từng cặp phần tử tương ứng. Do đó, nó tận dụng move semantics (từ C++11) nếu kiểu dữ liệu hỗ trợ, giúp tối ưu hiệu năng.- Phạm vi đầu vào có thể là các container, hoặc con trỏ (với mảng).
- Các phạm vi có thể là một phần của cùng một container.
swap_ranges()
yêu cầu Forward Iterator, cho phép di chuyển một chiều về phía trước.swap_ranges()
thường được sử dụng khi:- Bạn muốn hoán đổi các phần tử tương ứng giữa hai mảng hoặc hai phần của cùng một mảng.
- Bạn muốn tráo đổi dữ liệu giữa hai container khác nhau.
Ví dụ
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers1 = {1, 2, 3, 4, 5};
std::vector<int> numbers2 = {6, 7, 8, 9, 10};
// Hoán đổi các phần tử giữa numbers1 và numbers2
std::swap_ranges(numbers1.begin(), numbers1.end(), numbers2.begin());
std::cout << "numbers1 after swap_ranges: ";
for (int x : numbers1) {
std::cout << x << " ";
}
std::cout << std::endl;
std::cout << "numbers2 after swap_ranges: ";
for (int x : numbers2) {
std::cout << x << " ";
}
std::cout << std::endl;
int arr1[] = {11, 12, 13};
int arr2[] = {14, 15, 16};
// Hoán đổi các phần tử giữa hai mảng C-style
std::swap_ranges(arr1, arr1 + 3, arr2);
std::cout << "arr1 after swap_ranges: ";
for (int i = 0; i < 3; i++) {
std::cout << arr1[i] << " ";
}
std::cout << std::endl;
std::cout << "arr2 after swap_ranges: ";
for (int i = 0; i < 3; i++) {
std::cout << arr2[i] << " ";
}
std::cout << std::endl;
return 0;
}
Các hàm liên quan
swap | Hoán đổi giá trị của hai đối tượng |
iter_swap | Hoán đổi giá trị của hai đối tượng được trỏ đến bởi hai iterator |
replace | Thay thế tất cả các lần xuất hiện của một giá trị cũ bằng một giá trị mới trong một phạm vi (range) |