我想传递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;
}