C++ 中的迭代器。如何在知道迭代器的情况下修改向量?

pti*_*ti7 0 c++ iterator

尝试理解 C++ 中的迭代器。例如,在下面的代码中我们打印一个向量。

using Iterator = vector<int>::iterator;

void PrintRange(Iterator range_begin, Iterator range_end) {
    for (auto it = range_begin; it != range_end; ++it) {
        cout << *it << " ";
    }
}

int main() {
    vector<int> numbers = {5, 3, 2, 1};
    PrintRange(begin(numbers), end(numbers));
    return 0;
}
// 5 3 2 1 
Run Code Online (Sandbox Code Playgroud)

我的问题是如何正确编写一个仅需要两个迭代器并修改向量的函数。例如,函数 my_sort 对向量进行排序,如果我们写

my_sort(begin(numbers), end(numbers));
Run Code Online (Sandbox Code Playgroud)

number 包含修改后的排序向量。

void my_sort(Iterator range_begin, Iterator range_end) {
    // how to modify a vector knowing its iterators ?
}
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 5

如何在知道迭代器的情况下修改向量?

您可以通过输入迭代器间接访问它指向的元素。例子:

auto it = std::begin(numbers);
*it = 42;
Run Code Online (Sandbox Code Playgroud)

例如,函数 my_sort 对向量进行排序

排序函数通常会交换元素。您可以交换到迭代器指向的元素,如下所示:

std::iter_swap(it1, it2);
Run Code Online (Sandbox Code Playgroud)