Pro*_*oGM 3 c++ vector instance parameter-passing pass-by-reference
我必须在C++中定义一个函数,它生成一个类Foo的向量并返回它.
我可以用不同的方式定义它,它们都是完全相同的:
C样式参数传递:
void generateFooVector(vector<Foo> * result)
{
for (int i = 0; i < 100; i++)
{
Foo f = Foo();
result->push_back(f);
}
}
int main()
{
vector<Foo> result;
generateFooVector(&result);
}
Run Code Online (Sandbox Code Playgroud)
参考传球:
void generateFooVector(vector<Foo> & result)
{
for (int i = 0; i < 100; i++)
{
Foo f = Foo();
result->push_back(f);
}
}
int main()
{
vector<Foo> result;
generateFooVector(result);
}
Run Code Online (Sandbox Code Playgroud)
实例化向量并返回指针:
vector<Foo> * generateFooVector()
{
vector<Foo> * result = new vector<Foo>();
for (int i = 0; i < 100; i++)
{
Foo f = Foo();
result->push_back(f);
}
return result;
}
int main()
{
vector<Foo> * result = generateFooVector();
}
Run Code Online (Sandbox Code Playgroud)
C风格传递和实例化Foo类:
void generateFooVector(vector<Foo *> * result)
{
for (int i = 0; i < 100; i++)
{
Foo * f = new Foo();
result->push_back(f);
}
}
int main()
{
vector<Foo *> result;
generateFooVector(&result);
}
Run Code Online (Sandbox Code Playgroud)
引用传递+ Foo实例:
void generateFooVector(vector<Foo *> & result)
{
for (int i = 0; i < 100; i++)
{
Foo * f = new Foo();
result->push_back(f);
}
}
int main()
{
vector<Foo *> result;
generateFooVector(result);
}
Run Code Online (Sandbox Code Playgroud)
矢量实例+ Foo实例:
vector<Foo*> * generateFooVector()
{
vector<Foo*> * result = new vector<Foo*>();
for (int i = 0; i < 100; i++)
{
Foo * f = new Foo();
result->push_back(f);
}
return result;
}
int main()
{
vector<Foo *> * result = generateFooVector();
}
Run Code Online (Sandbox Code Playgroud)
价值传递:
vector<Foo> generateFooVector()
{
vector<Foo> result;
for (int i = 0; i < 100; i++)
{
Foo f = Foo();
result->push_back(f);
}
return result;
}
int main()
{
vector<Foo > result = generateFooVector();
}
Run Code Online (Sandbox Code Playgroud)
也许还有很多其他解决方案.
在范围内,所有当前方式对内存的分配方式都有不同的含义.
也许我缺乏理论,但我真的很困惑,我怎么能决定哪个是每个用例的更好的选择,以及为什么一个比另一个好.你能帮助我吗?
做就是了
vector<Foo> generateFooVector()
{
return vector<Foo>(100);
}
Run Code Online (Sandbox Code Playgroud)
它被称为modern c++.
该函数已在标准库中定义,称为构造函数std::vector<Foo>.你可以称之为(C++ 11风格)
auto v = std::vector<Foo>(n); // create n default constructed Foo() objects
Run Code Online (Sandbox Code Playgroud)
或者用C++ 98样式(在C++ 11中也有效)
std::vector<Foo> v(n);
Run Code Online (Sandbox Code Playgroud)
我不会尝试包装这个.
generateVector函数,第一个问题是:"与普通的构造函数调用相比,这个函数是做其他什么/额外的吗?"| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |