我想传递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);
^
答案 0 :(得分:1)
首先,您没有看起来像std::vector<std::vector<Type>>
的 vector的矢量 。您拥有的是向量的 variable-length array 。
VLA不是C ++标准的一部分,而是它们的编译器扩展。有关更多信息,请参见此帖子: Why aren't variable-length arrays part of the C++ standard?
话虽如此,如果n
是编译时已知的,则可以通过提供n
作为非类型模板参数来解决该问题。
template<std::size_t n>
void one(std::vector<int> (&v)[n])
{
v[0][0]=1;
}
对于 vector的矢量,不需要模板,而是通过引用传递模板。
void one(std::vector<std::vector<int>> &v)
// ^^^^^^^^^^
{
v[0][0]=1;
}
答案 1 :(得分:1)
您可以像这样传递向量
#include<bits/stdc++.h>
using namespace std;
// This function prints all element of vector
void FunctionWithVector(vector<int> &v) {
for(auto x: v) {
cout << x << "\n"
}
}
int main() {
vector<int> v(5);
for(int i=0;i<5;i++) {
v[i] = i;
}
FunctionWithVector(v);
}