我有一个创建2D矢量的函数
void generate(int n)
{
vector< vector<int> > V (n, vector<int>(1 << n , 0 ));
.......
}//n is used to determine the size of vector
Run Code Online (Sandbox Code Playgroud)
现在,我需要返回创建的向量以在另一个函数中使用它.如果我这样做了
return V ;
Run Code Online (Sandbox Code Playgroud)
这是错误的,因为V是一个局部变量,但我不能在函数外定义V,因为这个函数定义了V的大小.我该怎么办 ?
mea*_*gar 11
你可以return V没有问题 - 它将返回局部变量的副本.只有在返回带有局部作用域的变量的引用或指针时才会出现问题; 当函数结束时,局部变量超出范围并被销毁,并且引用/指针不再有效.
或者,您可以接受对向量的引用作为参数,写入并返回void:
void generate(int n, std::vector< std::vector<int> >& vec) {
vec.resize(n, std::vector<int>(1 << n, 0));
}
int main() {
std::vector< std::vector<int> > v;
generate(10, v);
}
Run Code Online (Sandbox Code Playgroud)
这比返回本地成员的副本更快,这对于诸如多维向量之类的大对象来说可能是昂贵的.
vector<vector<int> > generate(int n)
{
vector<vector<int> > v(n, vector<int>(1 << n, 0));
//...
return v;
}
Run Code Online (Sandbox Code Playgroud)
返回值是局部变量的副本,v因此根本没有问题.
如果你担心复制矢量,也许你可以这样做:
void generate(int n, vector<vector<int> >& v)
{
v.clear(); //not necessary if you're sure it's empty
v.resize(n, vector<int>(1 << n, 0));
//...
}
Run Code Online (Sandbox Code Playgroud)