Передача std :: array в качестве аргумента в C ++ - PullRequest
0 голосов
/ 01 марта 2020

Я хочу передать std::array в качестве аргумента функции, и не могу найти правильный путь.

Я не говорю о нормальном массиве C (например, int arr[2]={1,3};). Я говорю о std::array классе, доступном из C ++ 11.

Пример кода:

#include <iostream>
#include <array>

using namespace std;

class test
{
   void function(array<int> myarr)
   {
      // .......some code..........
   }
};

Как передать std::array в функцию, так как std::array занимает два аргументы шаблона: std::array<class T, std::size_t N>, но при передаче его в качестве аргумента я не хочу указывать размер?

Ответы [ 2 ]

2 голосов
/ 01 марта 2020

Отсутствие второго аргумента шаблона для std::array<> означает, что ваш класс test также должен быть шаблонным.

template <std::size_t N>
class test
{
    void function(const std::array<int, N> & myarr)
    {
        // ...
    }
};

Кстати, лучше передать myarr как const &.

0 голосов
/ 01 марта 2020

Вы можете использовать такой подход, как:

#include<array>
using namespace std;

template <size_t N>
class test
{
    void function(const array<int, N> & myarr)
    {
        /* My code */
    }
};

Но имейте в виду, что std::array не является динамическим c массивом. Вы должны знать размеры во время компиляции.

Если вы узнаете размеры позже во время выполнения вашей программы, вам следует рассмотреть возможность использования std::vector вместо этого:

#include<vector>

using namespace std;

class test
{
    void function(const vector<int> & myvec)
    {
        /* My code */
    }
};

В этом варианте вам вообще не нужно передавать размер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...