Chuyển tới nội dung chính

std::iter_swap

#include <algorithm>

template <class ForwardIterator1, class ForwardIterator2>
void iter_swap (ForwardIterator1 a, ForwardIterator2 b);

Hoán đổi giá trị của hai đối tượng được trỏ đến bởi hai iterator.

Tham số

a

  • Forward Iterator trỏ đến đối tượng thứ nhất.

b

  • Forward Iterator trỏ đến đối tượng thứ hai.

Giá trị trả về

Không có giá trị trả về

Đặc điểm

  1. iter_swap() hoán đổi giá trị của hai đối tượng được trỏ đến bởi iterator, không thay đổi vị trí của các iterator.
  2. iter_swap() sử dụng std::swap bên trong để thực hiện hoán đổi. Do đó, nó tận dụng move semantics (từ C++11) nếu kiểu dữ liệu của đối tượng hỗ trợ, giúp tối ưu hiệu năng.
  3. iter_swap() yêu cầu Forward Iterator, cho phép di chuyển một chiều về phía trước.
  4. Hai iterator ab không nhất thiết phải cùng kiểu, nhưng các đối tượng mà chúng trỏ đến phải hoán đổi được cho nhau (có thể sử dụng std::swap).
  5. iter_swap() được sử dụng để hoán đổi giá trị của hai đối tượng thông qua iterator của chúng. Điều này hữu ích khi bạn đang làm việc với các thuật toán thao tác trên các container thông qua iterator, và bạn cần hoán đổi giá trị của hai phần tử được trỏ đến bởi các iterator đó.

Ví dụ

#include <iostream>
#include <vector>
#include <algorithm>
#include <list>

int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};

// Hoán đổi phần tử đầu tiên và phần tử cuối cùng
std::iter_swap(numbers.begin(), numbers.end() - 1);

std::cout << "numbers after iter_swap: ";
for (int x : numbers) {
std::cout << x << " ";
}
std::cout << std::endl;

std::list<std::string> words = {"apple", "banana", "orange"};

// Hoán đổi phần tử thứ hai và phần tử đầu tiên
std::list<std::string>::iterator it1 = words.begin();
std::list<std::string>::iterator it2 = words.begin();
std::advance(it2, 1); // it2 trỏ đến phần tử thứ hai

std::iter_swap(it1, it2);

std::cout << "words after iter_swap: ";
for (const std::string& w : words) {
std::cout << w << " ";
}
std::cout << std::endl;

return 0;
}

Các hàm liên quan

swapHoán đổi giá trị của hai đối tượng
copySao chép các phần tử từ một phạm vi (range) nguồn sang một phạm vi đích khác
replaceThay 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)