foreach in C++ int array

jun*_*omo 8 c++ visual-c++ c++11

我是C++的新手,我正在编写以下代码.我需要遍历调用函数中的所有插件 - testFunction.我知道这在C#中有效,但是这段代码不起作用.任何人都可以指出在C++中正确的方法吗?

#include "stdafx.h"
#include <iostream>
#include "resource.h"

int testFunction(char* tester);
int _tmain()
{
    int mainProd=2;
    int Addons[]={7,8,9,10};

    testFunction(mainProd,Addons);


}
void testFunction(int mainProd,int addons[])
{
    for(int x = 0 ; addons.length;++x) ---- Not working 
    {
        std::cout<< addons[x];
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图按照以下建议实现矢量

#include "stdafx.h"
#include <iostream>
#include "resource.h"
#include <vector>

void testFunction(std::vector<int> addons);

int _tmain(int argc, _TCHAR* argv[])
{

    std::vector<int>  Addons ;
    for(int i = 0 ;i<10;++i)
    {
        Addons.push_back(i);
    }
     testFunction(Addons);
}

void testFunction(std::vector<int> addons)
{
    for(int i =0 ; i<addons.size();++i)
    {
        std::cout<<addons.at(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ton*_*ion 15

当作为参数传递给函数时,数组(原始数组)会衰减为指针,因此您的数组没有大小信息.

您需要将数组的长度显式传递给函数以在函数内部知道它.

或者,更好的是,使用a std::vector然后您将.size()在需要时随时可用.

  • 如果大小在编译时修复,则为`std :: array`. (3认同)

Arm*_*yan 7

除了使用向量之外,如Tony建议的那样,您可以使用模板并通过引用传递数组,以便编译器推断出数组的大小:

template<int N>
void testFunction(int mainProd,int (&addons)[N])
{
    for(int x = 0; x < N; ++x) // ---- working 
    {
        std::cout<< addons[x];
    }
}
Run Code Online (Sandbox Code Playgroud)