如何在C ++中声明和使用std :: array

时间:2012-01-24 01:03:57

标签: c++ function declaration

我有这个二维数组: array <array <int , 4> , 4> myarray

如何在程序中声明它?

//I first include
  #include <array>

然后我初始化它

        array<array<int,4>,4> myarray = {{
                                           {1, 2, 3, 4},
                                           {5, 6, 0, 8},
                                           {9, 10, 11, 12},
                                           {13, 14, 15, 7}
                                        }};

我宣布我的职能:

        void func1(array<array<int,4>,4> );
        void func2();
        void func3(int&, int&, array<array<int,4>,4>);
        void func4(array<array<int,4>,4>);
        void func5(array<array<int,4>,4>);
        void func6(array<array<int,4>,4>);

写一个主要功能:

    int main() {
                     func1(myarray);                                
                     func2();  
                     func3(myarray);  
                     func4(myarray);    
                     func5(myarray);   
                     func6(myarray);   
    return EXIT_SUCCESS;
    }

然后我写了函数

    void func1(array<array<int,4>,4> myarray)
        {//something 
        }

    void func2();
        {//something 
        }

    void func3(int&, int&, array<array<int,4>,4> myarray);
        {//something 
        }

    void func4(array<array<int,4>,4> myarray);
        {//something 
        }

    void func5(array<array<int,4>,4> myarray);
        {//something 
        }

    void func6(array<array<int,4>,4> myarray);
        {//something 
        }

我错了吗?

关键是,初始化数组:{1, 2, 3, 4}, {5, 6, 0, 8}, {9, 10, 11, 12}, {13, 14, 15, 7}将在第一个函数中输入。第一个函数的输出将是一个不同的4x4数组,例如{15, 14, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {2, 1, 4, 13}。这个不同的数组将作为输入放在第二个。这个函数的输出将是不同的等等....

我的问题是大多数函数的输出是初始化数组。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这个过程是这样的。你初始化你的数组:

array<array<int,4>,4> myarray = {{
    {1, 2, 3, 4},
  {5, 6, 0, 8},

          {9, 10, 11, 12},
       {13, 14, 15, 7}
       }};

然后,在main中,您拨打func1funct1的实施是:

void func1(array<array<int,4>,4> myarray)
        {//something 
        }

由于您将func1声明为void,这意味着它不会返回值。 array<array<int,4>,4> myarray是函数func1的参数的类型。当您从func1调用函数main时,您从main函数传递的变量将被复制myarray func1变量中(这称为pass by value),从逻辑上讲,它是全新的数组。如果要更改函数参数的值,可以使用引用或指针。如果是这样,您的函数的实现将是:

void func1(array<array<int,4>,4> &myarray)
            {//something 
            }

&符号表示myarray是您传递给函数的变量的引用。因此,如果在函数func1中修改myarray的值,则main函数中的数组也将被修改(因为您修改了函数func1中的值)。