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

发布于 2024-12-28 23:23:50 字数 2171 浏览 1 评论 0 原文

我有这个二维数组: array ; ,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 } 将在第一个 func 中输入。第一个 func 的输出将是不同的 4x4 数组,例如 {15, 14, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {2 , 1, 4, 13}。这个不同的数组将作为第二个的输入。这个函数的输出将是不同的等等,等等......

我遇到的问题是大多数函数的输出是初始化的大批。

感谢您提前的帮助。

I have this two-dimensional array : array <array <int , 4> , 4> myarray

How do I declare it right in a program?

//I first include
  #include <array>

then I initialize it

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

I declare my functions:

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

write a main function:

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

Then I write the functions

    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 
        }

Am I somewhere wrong ?

The point is, that the initialized array : {1, 2, 3, 4}, {5, 6, 0, 8}, {9, 10, 11, 12}, {13, 14, 15, 7} will be input in the first func . The output of the first func will be a different 4x4 array,for example {15, 14, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {2, 1, 4, 13}. This different array will be put as input in the second.The output of this func will be something different etc,etc....

The problem that I have is that the output of most functions is the initialized array.

Thanks for the help in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

宛菡 2025-01-04 23:23:50

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

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,这意味着它不返回值。
数组<数组,4> myarray 是函数func1 的参数类型。当您从 main 调用函数 func1 时,从 main 函数传递的变量将被复制 func1 的 >myarray 变量(这称为按值传递),从逻辑上讲,它是全新的数组。如果要更改函数参数的值,可以使用引用或指针。如果是这样,您的函数的实现将是:

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

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

The process goes like this. You initialize your array:

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

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

Then, in main, you call func1. The implementation of funct1 is:

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

Since you declared func1 as void that means that it does not return a value.
array<array<int,4>,4> myarray is type of the argument of function func1. When you call function func1 from main, the variable you pass from main function will be copied into the myarray variable of func1 (this is called pass by value), and logically, it is totally new array. If you want to change values of your function arguments you can use references or pointers. If so, implementation of your function will be:

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

The & symbol means that myarray is reference of the variable you passed to the function. So if, in function func1, you modify values of myarray, then array in your main function will be also modifed (because you modified the values in function func1).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文