在C++中,建议通过数组循环的方式是什么?

What is the recommended way loop through an array in C++?

本文关键字:循环 数组 方式 是什么 C++      更新时间:2023-10-16

我正在学习C++(对JavaScript相当有信心(,但我找不到与JSarray.length;相当的C++。我想要一种基于数组长度遍历数组的简单方法?

我已经遵循了许多教程,但所有接缝都需要在 for 循环中手动声明数组长度(或推送到函数中(?

下面的代码得到一个错误,添加 #include 会导致编译器错误 (DEV++(。

是否有C++或原因导致没有对数组长度的简单调用?

#include <iostream>
using namespace std;
int main () {
int shoppingList [3] = {1, 2, 3};
for (int i=0; i < shoppingList.size(); i++) {
cout << shoppingList[i] << endl;
}
}

对于像你这样的 C 样式数组,你可以使用基于范围的for循环:

for (int value : shoppingList)
{
std::cout << value << 'n';
}

至于从数组中获取元素的数量,有一个"技巧":你知道数组本身的大小,你知道数组中每个元素的大小。这意味着如果将数组的大小除以每个元素的大小,您将获得元素的数量。

总之

size_t numberElements = sizeof shoppingList / sizeof shoppingList[0];

重要提示:此"技巧"仅适用于实际数组!一旦数组衰减到指针(指向它的第一个元素,这种情况经常发生(,你剩下的就是指针。没有办法得到它所指向的内存大小,这个"技巧"不能使用。


正如我在评论中提到的,"最佳"解决方案是使用std::arraystd::vector.

内置类型没有具有C++的成员函数。但是,有一个非成员std::size(array)函数:

for (std::size_t i{}; i != std::size(shoppingList); ++i) {
// ...
}

请注意,计数器是 usinfstd::size_t以匹配std::size(...)结果的符号性。另外,不要使用其他答案中建议的sizeof黑客:这是一个陷阱!当将指针传递给它时,cde 会很乐意编译,但它也会产生错误的结果。

当然,在C++范围内迭代一个范围(包括数组(的惯用方法是(假设您只需要值而不是它们的位置(:

for (int val: shoppingList) {
// ...
}

数组没有直接 size(( 成员函数,你可以找到像这样的数组的大小int size = sizeof(arr)/sizeof(arr[0]);并在 for 循环中使用它。

#include <iostream>
using namespace std;
int main () {
int shoppingList [3] = {1, 2, 3};
int size = sizeof(shoppingList)/sizeof(shoppingList[0]);
for (int i=0; i < size(); i++) {
cout << shoppingList[i] << endl;
}
}

你可以做类似 sizeof(A(/sizeof(A[0]( 的操作。这将为您提供数组中元素的总数。

让我们举一个例子 A = {1,2,3,4,5}//所有整数 如果你计算 sizeof(A(/sizeof(A[0](,它会给你 5,正如你所看到的,你不需要手动输入数组的大小。

希望这有帮助。 :)

#include <iostream>
using namespace std;
int main()
{
A = {1,2,3,4,5};
for (int i = 0; i< sizeof(A)/sizeof(A[0]); i++)
//whatever you want to do with this
return 1;
}