У меня есть функция в программе, которую я пишу для школьной научной ярмарки, и для этого нужно взять массив в качестве параметра, зашифровать значения массива и сохранить зашифрованные значения в строке. Как я могу это сделать?
Есть несколько способов сделать это. Вот несколько примеров:
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>. Используйте это как:
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 и т. Д.), Так и обычные массивы. Например,
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.
Круто, не правда ли?
void YourFunction(const int myarray[]);
В противном случае, если вы хотите принять любой тип
void YourFunction(const void* myGenericArray);
Надеюсь, это поможет
void encrypt(Array& array, /*other parameters*/)
будет делать, какой бы тип массива вы не использовали.
Если ваш массив является указателем в стиле C, вы также можете просто передать его:
void encrypt(int* array, /*other parameters*/)