鉴于以下用法auto:
std::vector<int> v;
for (auto i = 0; i < v.size(); ++i) {
...
}
Run Code Online (Sandbox Code Playgroud)
这将是理想的C++推断i为std::vector<int>::size_type,但如果只着眼于初始值设定i,它会看到一个整数.i在这种情况下推导出的类型是什么?这是适当的用法auto吗?
Pra*_*ian 20
使用decltype而不是auto声明i.
for( decltype(v.size()) i = 0; i < v.size(); ++i ) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
更好的是,使用迭代器迭代向量,如@MarkB的答案所示.
Mar*_*k B 13
为什么不用迭代器解决你的问题?然后问题就消失了:
std::vector<int> v;
for (auto i = v.begin(); i != v.end(); ++i) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果你想使用索引进行迭代,我可能只是明确地说明了这个类型:你知道它是什么.auto主要用于我认为的未知或难以输入的模板类型.
您的问题的答案"这是否适用于汽车?" 不是出于其他答案中解释的原因.对于循环容器内容的特定情况,最好使用基于for循环的范围:
const引用对元素的访问,i是const int&:
std::vector<int> v;
for (const auto& i : v ) {
std::cout << i << "\n";
}
Run Code Online (Sandbox Code Playgroud)
非const引用访问,i是int&:
std::vector<int> v;
for (auto& i : v ) {
++i;
std::cout << i << "\n";
}
Run Code Online (Sandbox Code Playgroud)
价值访问,i是int:
std::vector<int> v;
for (auto i : v ) {
...
}
Run Code Online (Sandbox Code Playgroud)
等等.这也适用于C风格的数组.
| 归档时间: |
|
| 查看次数: |
2084 次 |
| 最近记录: |