Jur*_*aho 13 c++ containers stl
从函数返回stl容器的最佳方法(性能方面)是什么?返回的容器通常包含数千个项目.
方法1:
typedef std::list<Item> ItemContainer;
ItemContainer CreateManyItems() {
ItemContainer result;
// fill the 'result' ...
return result;
}
ItemContainer a = CreateManyItems();
Run Code Online (Sandbox Code Playgroud)
方法2:
void CreateManyItems(ItemContainer &output) {
ItemContainer result;
// fill the 'result' ...
output.swap(result);
}
ItemContainer a;
CreateManyItems(a);
Run Code Online (Sandbox Code Playgroud)
方法3:
void std::auto_ptr<ItemContainer> CreateManyItems() {
std::auto_ptr<ItemContainer> result(new ItemContainer);
// fill the 'result' ...
return result;
}
std::auto_ptr<ItemContainer> a = CreateManyItems();
Run Code Online (Sandbox Code Playgroud)
还是有更好的方法吗?
如果您只想填充std::list项目,则可以使用,std::fill或者您可以使用或std::fill_n或或标准算法功能的组合.
由于不清楚您希望填写列表的具体内容是什么/如何,因此无法准确评论您的代码.除非您执行使用标准算法函数无法完成的非常特殊或复杂的操作,否则请使用标准算法函数.如果他们没有帮助你,那么只有第一种方法,编译器可能会优化代码中的返回值,从而消除不必要的副本,因为大多数编译器都实现了RVO.
在维基百科上查看以下主题:
在stackoverflow本身看到这些有趣的主题:
戴夫亚伯拉罕的一篇文章:
我仍然会强调这一点:你看过标题提供的所有通用函数了<algorithm>吗?如果没有,那么我建议你首先查看它们,看看它们中的任何一个(或它们的组合)是否可以在你的代码中做你想做的事情.
如果要创建并填充列表,则可以使用std::generate() 或std::generate_n运行.
我通常使用方法4(几乎与方法2相同):
void fill(ItemContainer& result) {
// fill the 'result'
}
ItemContainer a;
fill(a);
Run Code Online (Sandbox Code Playgroud)