如何通过参考传递向量的静态向量



我想传递v向量,以便每次调用函数one(..)时都不会复制它。但是我无法做到。

谁能帮我摆脱困境?

int n; // global variable
void one(vector <int >(&v)[n]) 
{
    v[0][0] = 1;
}
int main()
{
    cin >> n;//n=1
    vector <int > v[n];
    v[0].push_back(9);
    one(v);
    cout << v[0][0];
}

错误消息:

prog.cpp:5:32: error: variable or field ‘one’ declared void
  void one(vector <int > (&v)[n]){
                                ^
prog.cpp:5:27: error: ‘v’ was not declared in this scope
  void one(vector <int > (&v)[n]){
                           ^
prog.cpp: In function ‘int main()’:
prog.cpp:17:6: error: ‘one’ was not declared in this scope
 one(v);
      ^

首先,您没有向量的向量 ,看起来像 std::vector<std::vector<Type>>。您拥有的是向量的变量长度

vla不是C 标准的一部分,而是编译器延伸。有关更多信息,请参见此帖子:为什么变量长度阵列不标准C 标准?

说,如果n已汇编,您可以通过提供n作为非类型模板参数来解决问题。

template<std::size_t n>
void one(std::vector<int> (&v)[n])
{
    v[0][0]=1;
}

对于向量的向量,不需要模板,而是通过参考将其传递。

void one(std::vector<std::vector<int>> &v)
//                               ^^^^^^^^^^
{
    v[0][0]=1;
}

最新更新