在 vector 数组方面,基于范围的for循环还有其他选择吗?我注意到c++ 98不允许基于范围的for循环。这是一些使用基于范围的for循环遍历 vector 数组的示例代码:
#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个元素,而不是上面的 vector 数组定义的3个元素。有什么替代基于范围的for循环与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
在我的机器上,因为类型unsigned long long由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()的所有类型(即可以迭代的类型)。
关于c++ - C++中基于范围的for循环的替代方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28921218/