C++ 中基于范围的 for 循环的替代方法
Alternative to range-based for loops in c++
当涉及到矢量数组时,基于范围的for循环还有其他选择吗?我注意到 c++98 不允许基于范围的 for 循环。下面是一些使用基于范围的 for 循环遍历矢量数组的示例代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vecArray1 (3,20);
for (int v: vecArray1) {
cout << "ArrayValue:" << v << endl;
}
return 0;
}
现在这是我尝试过的另一种不起作用的替代方案:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vecArray1 (3,20);
for (int i=0; i<sizeof(vecArray1); ++i) {
cout << "ArrayValue:" << vecArray1[i] << endl;
}
return 0;
}
它输出 10 个元素,而不是上面矢量数组定义的 3 个元素。对于适用于 c++98 的基于范围的循环,是否有任何替代方法?
C++98 不允许基于范围的 for 循环。在 C++98 中,您需要执行以下操作:
for(unsigned int i=0;i<vecArray.size();++i)
std::cout << "ArrayValue: " << vecArray[i] << std::endl;
或
for(std::vector<int>::iterator it=vecArray.begin();it!=vecArray.end();++it)
std::cout << "ArrayValue: " << *it << std::endl;
操作员
sizeof
不会给你数组的长度。相反,它返回一个无符号整数,表示您作为参数提供的类型的字节数。例如
std::cout << sizeof(unsigned long long) << std::endl;
指纹
8
在我的机器上,因为无符号长长类型由 64 位或 64/8 = 8 字节组成。
在 C++11 中,我们现在有了基于范围的 for 循环:
例子:
for(int i : vecArray)
std::cout << "i = " << i << std::endl;
for(const int& i : vecArray)
std::cout << "i = " << i << std::endl;
在第一个示例中,值从 vecArray 复制到变量 i 中。在第二个示例中,您将使用对 vecArray 中值的 const 引用(这对于复制成本高昂的对象可能很有用)。
事实上,C++11 中基于范围的 for 循环可用于您可以调用 begin() 和 end() 的所有类型(即您可以迭代的类型)。
sizeof(vecArray1)
不会做你认为它做的事情。
使用以下任一用途:
for (int i=0; i<vecArray1.size(); ++i) {
cout << "ArrayValue:" << vecArray1[i] << endl;
}
或:
for (std::vector<int>::iterator it = vecArray1.begin(); it != vecArray1.end(); it++) {
cout << "ArrayValue: " << *it << endl;
}
第二个更详细,但也适用于其他类型的集合(如std::list
),并且更类似于基于范围的 for 循环。
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么我的for循环不能正确获取argv
- 在基于范围的for循环中使用结构化绑定声明
- 通过for循环使用用户输入填充列表
- 使用for循环检查数组中的重复项
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 正在使用for循环创建QScatterSerie
- Python中的for循环与C++有何不同
- 在更改for循环的第三部分后,未使用for循环结果
- 在 for 循环中查找问题时遇到困难
- 嵌套for循环C++的问题(初学者)
- 如何用for循环在c++中生成单词三角形
- 如何在for循环中包含两个索引值的测试条件
- 带有多个独立参数的C++For循环
- 为什么我的程序在for循环中k=0时返回垃圾值
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- C++-For循环未执行
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- C++ 无法在字符数组中使用 for 循环打印字母模式