как правильно объявить и использовать std :: array в C ++ - PullRequest
0 голосов
/ 24 января 2012

У меня есть этот двумерный массив: 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 Ответ

1 голос
/ 24 января 2012

Процесс идет так.Вы инициализируете свой массив:

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

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

Затем, в main, вы вызываете func1.Реализация funct1:

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

Поскольку вы объявили func1 как void, это означает, что он не возвращает значение.array<array<int,4>,4> myarray - это тип аргумента функции func1.Когда вы вызываете функцию func1 из main, переменная, которую вы передаете из main, функция будет скопирована в myarray переменную func1 (это называется передачей по значению), ипо логике, это совершенно новый массив.Если вы хотите изменить значения аргументов вашей функции, вы можете использовать ссылки или указатели.В этом случае реализация вашей функции будет выглядеть следующим образом:

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

Символ & означает, что myarray является ссылкой на переменную, которую вы передали функции.Поэтому, если в функции func1 вы измените значения myarray, то массив в вашей функции main также будет изменен (поскольку вы изменили значения в функции func1).

...