C++/C++11中是否有类似Python“for i, v in enumerate(listVar):”的迭代方法?

6 投票
1 回答
701 浏览
提问于 2025-04-18 05:15

有没有类似于Python那种写法的C++方法:

for i, v in enumerate(listVar):

也就是说,我想在遍历一个容器的时候,既能拿到它的索引(位置)又能拿到它的值。

1 个回答

3

你可以这样做。假设你的容器是 std::vector<int> v

那么你可以写成这样

std::vector<int>::size_type i = 0;

for ( int x : v )
{
   // using x;
   // using v[i];
   ++i;
}

举个例子

#include <iostream>
#include <vector>

int main()
{
   std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

   std::vector<int>::size_type i = 0;
   for ( int x : v )
   {
      std::cout << x << " is " << v[i] << std::endl;
      ++i;
   }
}

不过有个问题,就是迭代器必须是随机访问迭代器。否则你就不能使用下标操作符。

撰写回答