2015-02-11 77 views
1

在我的程序中,我想将几​​个变量传递给一个函数,并让该函数运行for循环将数据写入控制台。如何将值列表传递给期望数组的函数?

这是我的代码:

void WriteValue(int[] arr) 
{ 
    for(auto c : arr) 
     std::cout<<arr<<std::endl; 
} 

int main() 
{ 
    int a = 0; 
    int b = 1; 
    int c = 3; 

    WriteValue(a,b,c); 

    return 0; 
} 

我知道这会在C#工作使用参数,但我没有这样的选择。我如何得到这个在C++中运行?

+0

我在这里看不到任何'unsigned'类型。你正在寻找一个可变参数函数,或者'std :: initializer_list '? – 2015-02-11 02:03:34

+0

只是你知道,声明遵循use,所以它会是'int * arr'或'int arr []',但是你不能使用ranged-for,因为一个指针不带有它的大小。你想发送'c'到'cout',而不是'arr'。 – 2015-02-11 02:09:01

+0

@BenVoigt很高兴知道。尽管如此,我并不担心for循环。我只是需要一些东西来测试它。我更关心将我的价值观传递给我的功能。 – SyntaxIsEvil 2015-02-11 02:34:27

回答

3

这里是一个非常简单和灵活的方式:

#include <iostream> 

template<typename T> 
void WriteValue(const T& arr) 
{ 
    for(auto c : arr) 
     std::cout << c << std::endl; 
} 

int main() 
{ 
    int a = 0; 
    int b = 1; 
    int c = 3; 

    WriteValue(std::array<int, 3>{a,b,c}); 
    // nicer C99 way: WriteValue((int[]){a,b,c}); 

    return 0; 
} 

如果你只希望能够通过INTS的列表(和它必须是一个括号分隔的列表,而不是现有的阵列)您可以改为做

#include <iostream> 
#include <initializer_list> 

void WriteValue(const std::initializer_list<int>& arr) 
{ 
    for(auto c : arr) 
     std::cout << c << std::endl; 
} 

int main() 
{ 
    int a = 0; 
    int b = 1; 
    int c = 3; 

    WriteValue({a,b,c}); 

    return 0; 
} 

不幸的是,VS2012 doesn't support this.可以升级到Visual 2013(易捷版和Community Edition都是免费的),或者你可以使用一个辅助变量:

#include <iostream> 

template<typename T> 
void WriteValue(const T& arr) 
{ 
    for(auto c : arr) 
     std::cout << c << std::endl; 
} 

int main() 
{ 
    int a = 0; 
    int b = 1; 
    int c = 3; 

    int args[] = { a, b, c }; 
    WriteValue(args); 

    return 0; 
} 
+0

我尝试了这两种方法,但似乎都没有工作。当我尝试第一个时,它在这一行上给我一个错误:'WriteValue((int [3]){a,b,c});'。它说它期待一个表达。第二个它说它initializer_list是未定义的。这是一个C++ 11库吗?如果是这样,我不认为我的笔记本电脑支持它。 – SyntaxIsEvil 2015-02-11 02:17:52

+0

@SyntaxIsEvil:是的,'std :: initializer_list'是C++ 11的一部分。在你的问题中,ranged-for也是如此。如果你需要特定编译器的答案,而不是标准的C++,你需要在你的问题中这样说。 – 2015-02-11 02:25:47

+0

我直到今天才知道C++ 11,所以我不知道当前版本中是什么并且不支持。我不知道我目前使用的是什么版本的C++。我一直在使用它在我的代码的其他部分,它一直没有任何问题的工作。对于标准C++,我将如何解决我目前的问题? – SyntaxIsEvil 2015-02-11 02:32:35

相关问题