在C++中使用数组循环的推荐方法是什么?

Ben*_*nes 2 c++ arrays

我正在学习C++(对JavaScript有相当的信心)而且我找不到与JS相当的C++ array.length;.我想要一种基于数组长度循环数组的简单方法?

我已经遵循了一些教程但是所有接缝要求在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 8

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

for (int value : shoppingList)
{
    std::cout << value << '\n';
}
Run Code Online (Sandbox Code Playgroud)

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

简而言之

size_t numberElements = sizeof shoppingList / sizeof shoppingList[0];
Run Code Online (Sandbox Code Playgroud)

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


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

  • 从C++ 17开始,可以使用[`std :: size()`](https://en.cppreference.com/w/cpp/iterator/size)来获取数组元素.当与衰减为指针的数组一起使用时,它还具有抛出编译器错误的优点. (3认同)