foreach in C ++ int array

时间:2013-01-15 13:19:23

标签: 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];
    }
}

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

#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);
    }
}

6 个答案:

答案 0 :(得分:15)

当一个数组(原始数组)作为参数传递给函数时衰减成指针,因此你的数组没有大小信息。

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

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

答案 1 :(得分:7)

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

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

答案 2 :(得分:3)

你在C ++中使用C#的概念,但是,即使我们假设两种语言都相似,它们也不相同。

C ++中ranged-for的语法是the following

for (type identifier : container) // note the ':', not ';'
{
    // do stuff
}

如果您有C++11 compiler,则可以将此用于 flavor

顺便说一句,您似乎在使用代码中的属性:

for(int x = 0 ; addons.length;++x) // what is lenght?
{
    std::cout<< addons[x];
}

在C ++中没有这样的东西,如果你想调用一个对象方法,你需要把它称为函数:

// assuming that the object 'addons' have a method
// named 'length'  that takes no parameters
addons.length();

但是addons变量不是一个对象,是一个数组(看一看this tutorial),所以它没有名为length的方法或属性;如果您需要知道它的长度以便迭代它,您可以在某些上下文中使用sizeof运算符(有关详细信息,请参阅教程)。

我们假设addons是一个容器:

typedef std::vector<addon> Addons;
Addons addons;

如果要使用C ++ 11 range-for迭代它,可以按如下方式编写它:

for (addon a : addons)
{
    // do stuff with a.
}

希望它有所帮助。

答案 3 :(得分:2)

如果您使用std::vectorstd::array,则可以使用std::foreach

std::vector<int> addons = {7,8,9,10};
std::array<int, 4> addons = {7,8,9,10}; // Only use one of these...
std::foreach(addons.begin(), addon.end(), [](int i) {
    std::cout << i
});

答案 4 :(得分:1)

代码正在使用此

for(int i = 0; i&lt;(end(array) - begin(array)); i ++)

返回最大尺寸

测试数组是否为空

array::empty

数组元素

array::size

数组大小

sizeof()

答案 5 :(得分:0)

如果您不想使用任何STL容器,只需要将数组通过引用传递给函数。这里的问题是,没有数组的确切大小就无法定义此类参数。您可以克服此限制,使函数成为模板,将大小定义为模板参数:

#include <iostream>

template<int N>
void testFunction(int mainProd,int (&addons)[N])
{
    for(int x = 0 ; x < N; ++x)
    {
        std::cout<< addons[x];
    }
}

int main()
{
    int mainProd=2;
    int Addons[]={7,8,9,10};

    testFunction(mainProd,Addons);
    return 0;
}