Li *_*Kui 3 c++ scope for-loop
我很困惑," 'iter'未在此范围内声明 "错误.
#include <vector>
using std::vector;
int main()
{
vector<int> vec{1,2,3,4,5,6};
for(std::size_t i,vector<int>::iterator iter=vec.begin();iter!=vec.end();++i,++iter)
{
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
Nat*_*ica 13
就像你能做的那样
int a = 10, b = 20;
Run Code Online (Sandbox Code Playgroud)
for循环的第一部分做同样的事情.既然你做不到
int a = 10, double b = 20;
Run Code Online (Sandbox Code Playgroud)
同样的事情适用于for循环.
从技术上讲,你可以有两种不同的类型,因为你可以在同一行上声明一个类型和指向同一类型的指针
int i = 0, *b = nullptr;
Run Code Online (Sandbox Code Playgroud)
这也适用于for循环.
在C++ 17中,有一个称为结构化绑定声明的功能,允许您执行此操作.例如:
for (auto [iter, i] = std::tuple{vec.begin(), 0u}; iter != vec.end(); ++iter, ++i)
{
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
虽然这几乎与您希望的语法相匹配,但该tuple部分的可读性不高,所以我只是在循环之外声明其中一个变量.
它可以,但两个变量需要是相同的类型.
当您需要维护索引以及迭代器时,常见的事情就是编写
{ // extra scoping block
std::size_t i = 0; // indeed, you need to initialise i
for(vector<int>::iterator iter = vec.begin(); iter != vec.end(); ++i,++iter)
{
// do something
}
}
Run Code Online (Sandbox Code Playgroud)