Как я могу сделать массив параметром функции в C ++? - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть функция в программе, которую я пишу для школьной научной ярмарки, и для этого нужно взять массив в качестве параметра, зашифровать значения массива и сохранить зашифрованные значения в строке. Как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 08 ноября 2011

Есть несколько способов сделать это. Вот несколько примеров:

  • C-стиль

    void f(T *array, size_t size);
    

    В этом стиле массив распадается на указатель на первый аргумент, который передается функции в качестве первого аргумента. Так как это преобразование теряет размер массива, вы также должны передать размер, что я делаю в качестве второго аргумента функции. Используйте это как:

    T  array[N]; //N is some compile-time constant.
    f(array, N);
    
  • C ++ - стиль

    template<typename T, size_t size>
    void f(T (&array)[size]);
    
    void f(std::vector<T> & array);
    

    В этом стиле вы можете передать массив по ссылке, который сохраняет размер массива, или вместо него можно использовать std::vector<T>. Используйте это как:

    T array[N];
    f(array); //calls the first version (the template version)
    
    std::vector<T> v;
    //fill v
    f(v); //calls the vector version
    

    Добавлено @Mike: или вы можете использовать это, что еще лучше:

    template<typename FwdIterator>
    void f(FwdIterator begin, FwdIterator end)
    {
       for( ; begin != end ; ++begin)
       {
            //your code
       }
    }
    

    Это лучше и более универсально, потому что с ним вы можете использовать как стандартные контейнеры (такие как std::vector, std::list и т. Д.), Так и обычные массивы. Например,

    T array[N];
    std::vector<T> v;
    //fill v
    
    f(array, array+N);      //okay
    f(v.begin(), v.end());  //also okay.
    

    Круто, не правда ли?

1 голос
/ 08 ноября 2011
void YourFunction(const int myarray[]);

В противном случае, если вы хотите принять любой тип

void YourFunction(const void* myGenericArray);

Надеюсь, это поможет

0 голосов
/ 08 ноября 2011
void encrypt(Array& array, /*other parameters*/)

будет делать, какой бы тип массива вы не использовали.

Если ваш массив является указателем в стиле C, вы также можете просто передать его:

void encrypt(int* array, /*other parameters*/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...