📅  最后修改于: 2023-12-03 14:57:58.166000             🧑  作者: Mango
在 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
,这样可以确保迭代过程中不会修改向量的值。
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 迭代器。
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 循环,可以让代码更加简洁易读。