如何在C++中将数组作为函数的参数?

Mon*_*tor 0 c++ encryption hash

我在为学校科学博览会编写的程序中有一个函数,它需要做的是将数组作为参数,加密数组的值,并将加密的值存储在字符串中.我怎样才能做到这一点?

Naw*_*waz 5

有几种方法可以做到这一点.以下是一些例子:

  • C-风格

    void f(T *array, size_t size);
    
    Run Code Online (Sandbox Code Playgroud)

    在这种风格中,数组衰减到指向第一个参数的指针,该参数作为第一个参数传递给函数.由于这种转换失去了数组的大小,你也要传递大小,我作为函数的第二个参数.用它作为:

    T  array[N]; //N is some compile-time constant.
    f(array, N);
    
    Run Code Online (Sandbox Code Playgroud)
  • C++ - 风格

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

    在此样式中,您可以通过引用传递数组,该数组保留数组的大小,或者您可以使用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
    
    Run Code Online (Sandbox Code Playgroud)

    由@Mike添加:或者你可以使用它,这甚至更好:

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

    这是更好,更通用的,因为有了它,你可以使用标准的容器(如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.
    
    Run Code Online (Sandbox Code Playgroud)

    很酷,不是吗?