Menu
CoddyTech

双向迭代器

Coddy C++ 标准模板库 课程的第 17 课,共 23 课。

双向迭代器支持前向迭代器的所有功能,还支持两种递减运算符(前置和后置)。因此,双向迭代器可以用于双向访问和修改元素序列,既可以朝序列末尾移动,也可以朝序列开头移动。

如你所见,随机访问迭代器也是有效的双向迭代器。


接下来,我们将学习双向迭代器的特性。


  • 相等/不等运算符:双向迭代器可以使用相等运算符或不等运算符进行比较。只有当两个迭代器都指向同一位置时,它们才相等。
A == B // 相等
A != B // 不相等

  • 解引用
    我们可以对双向迭代器进行解引用,以实现两种功能:访问迭代器所指向元素的值,以及为该元素赋值。
*A = X;
X = *A;

  • 可递增/可递减
    双向迭代器可以使用 ++ 运算符递增,也可以使用 -- 运算符递减。
A++; // 后置自增运算符
++A; // 前置自增运算符
A--; // 前置自减运算符
--A; // 后置自减运算符

  • 可交换
    一个双向迭代器的值可以与另一个双向迭代器的值互换。

最后总结一下:双向迭代器与前向迭代器非常相似,后者将输入迭代器和输出迭代器合二为一。双向迭代器还可以递减,这意味着它能够沿两个方向访问序列中的元素。

challenge icon

挑战

简单

输入的一行中给出了 10 个数字。下一行给出了一个数字 X,表示数字的索引(索引范围为 1-10)。使用双向迭代器,先从索引 X 开始输出数字,直到末尾。然后从索引 X 开始,向前输出数字,直到开头。

 

Input
10 20 30 40 50 60 70 80 90 100
6
Output
60 70 80 90 100 60 50 40 30 20 10

亲手试试

#include <vector>
#include <iostream>

using namespace std;

int main()
{
    vector<int> numbers;
    vector<int>::iterator it1, it2;

    int x, y;

    // Enter your code here

    it1 = numbers.begin();
    it1 += x - 1;

    for(it1; it1 != numbers.end(); )
        cout <<  << " ";
    cout << endl;
    for(it2; it2 != numbers.begin() - 1; )
        cout <<  << " ";

    return 0;
}

C++ 标准模板库中的所有课

自己练习: C++ 在线编译器