gpt4 book ai didi

c++ - c++ 中基于范围的 for 循环的替代方法

转载 作者:行者123 更新时间:2023-11-30 01:49:33 26 4
gpt4 key购买 nike

当涉及到 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 个元素。除了适用于 c++98 的基于范围的 for 循环之外,还有其他替代方法吗?

最佳答案

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com