在C++中,没有内建的 for -- in --
这种循环结构,因为C++是一种静态类型语言,它的循环结构不像一些动态语言(如Python)那样可以直接遍历容器中的元素。不过,C++提供了几种方式来遍历容器或数组:
for
循环(C++11及以后版本):你可以使用基于范围的 for
循环来遍历数组或容器中的每个元素。这种循环结构在语法上类似于 for -- in --
循环。
1#include <vector>
2#include <iostream>
3int main() {
4 std::vector<int> numbers = {1, 2, 3, 4, 5};
5
6 for (int number : numbers) {
7 std::cout << number << " ";
8 }
9 std::cout << std::endl;
10 return 0;
11}
for
循环:对于数组,你可以使用传统的 for
循环来遍历元素。
1int arr[] = {1, 2, 3, 4, 5};
2int len = sizeof(arr) / sizeof(arr[0]);
3for (int i = 0; i < len; ++i) {
4 std::cout << arr[i] << " ";
5}
6std::cout << std::endl;
对于标准模板库(STL)中的容器,你可以使用迭代器来遍历元素。
1#include <vector>
2#include <iostream>
3int main() {
4 std::vector<int> numbers = {1, 2, 3, 4, 5};
5
6 for (std::vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
7 std::cout << *it << " ";
8 }
9 std::cout << std::endl;
10 return 0;
11}
在C++11及以后的版本中,推荐使用基于范围的 for
循环,因为它更加简洁和直观。如果你需要索引,你可以同时使用基于范围的 for
循环和 std::distance
函数来获取当前元素的索引。
在C++中,vector
是一个顺序容器,它提供了随机访问迭代器,因此你可以很容易地从后向前遍历一个 vector
。有几种方法可以实现这一点:
vector
类提供了一个名为 rbegin()
的成员函数,它返回一个指向容器最后一个元素的后一个位置的逆向迭代器。还有一个名为 rend()
的成员函数,它返回一个指向容器第一个元素的前一个位置的逆向迭代器。你可以使用这两个迭代器来从后向前遍历 vector
。
1#include <iostream>
2#include <vector>
3int main() {
4 std::vector<int> vec = {1, 2, 3, 4, 5};
5 for (auto it = vec.rbegin(); it != vec.rend(); ++it) {
6 std::cout << *it << " ";
7 }
8 std::cout << std::endl;
9 return 0;
10}
如果你不想使用逆向迭代器,你也可以使用普通迭代器和自减运算符来从后向前遍历 vector
。
1#include <iostream>
2#include <vector>
3int main() {
4 std::vector<int> vec = {1, 2, 3, 4, 5};
5 for (auto it = vec.end() - 1; it >= vec.begin(); --it) {
6 std::cout << *it << " ";
7 }
8 std::cout << std::endl;
9 return 0;
10}
从C++11开始,你可以使用基于范围的for循环来简化遍历容器的过程。要使用基于范围的for循环从后向前遍历 vector
,你可以结合使用 rbegin()
和 rend()
。
1#include <iostream>
2#include <vector>
3int main() {
4 std::vector<int> vec = {1, 2, 3, 4, 5};
5 for (auto it : std::vector<int>(vec.rbegin(), vec.rend())) {
6 std::cout << it << " ";
7 }
8 std::cout << std::endl;
9 return 0;
10}
在这个例子中,我们创建了一个新的 vector
,它包含了原始 vector
的逆向迭代器范围。这样,基于范围的for循环就可以从后向前遍历元素了。