📜  迭代 const 向量 - C++ (1)

📅  最后修改于: 2023-12-03 14:57:58.166000             🧑  作者: Mango

迭代 const 向量 - C++

在 C++ 中,常常需要对容器进行迭代操作。如果容器是只读的,那么应该使用 const 向量。本文将介绍如何迭代 const 向量。

迭代器

迭代器是 STL 中用于遍历容器中元素的一个重要工具。迭代器有几种分类,最常见的是指针迭代器和容器迭代器。

对于 const 向量,我们可以使用 const_iterator 来进行遍历:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> v{1, 2, 3, 4, 5};
    const vector<int>& cv = v;

    // 使用 const_iterator 进行遍历
    for (vector<int>::const_iterator it = cv.begin(); it != cv.end(); ++it) {
        cout << *it << " ";
    }
    cout << endl;

    return 0;
}

输出:

1 2 3 4 5

在上面的例子中,我们定义了一个常量引用 cv,它指向向量 v。使用 const_iterator 来迭代 cv,这样可以确保迭代过程中不会修改向量的值。

auto 关键字

C++11 引入了 auto 关键字,可以自动推导变量类型。对于迭代器类型,我们通常使用 auto 来推导:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> v{1, 2, 3, 4, 5};
    const vector<int>& cv = v;

    // 使用 auto 进行遍历
    for (auto it = cv.begin(); it != cv.end(); ++it) {
        cout << *it << " ";
    }
    cout << endl;

    return 0;
}

输出:

1 2 3 4 5

使用 auto 可以让代码更加简洁。同时,如果我们在 for 循环中使用 auto&&,则可以自动推导迭代器类型并且支持 rvalue 迭代器。

范围 for 循环

C++11 还引入了范围 for 循环,可以更加简化迭代操作:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> v{1, 2, 3, 4, 5};
    const vector<int>& cv = v;

    // 使用范围 for 循环遍历
    for (auto x : cv) {
        cout << x << " ";
    }
    cout << endl;

    return 0;
}

输出:

1 2 3 4 5

范围 for 循环可以帮我们自动推导迭代器类型,并且支持在迭代过程中直接访问元素。如果需要修改容器中的元素,那么应该使用普通向量而不是 const 向量。

总结

本文介绍了如何使用迭代器、auto 关键字和范围 for 循环来迭代 const 向量。在实际编码中,建议尽可能地使用 auto 和范围 for 循环,可以让代码更加简洁易读。