我完全理解这个问题已经被问了很多,但我要求一个特定的变化,我的搜索foo已经放弃了,因为我只发现了一个算法将一个现有的向量附加到另一个,但没有一个返回到一个功能.
我有这个功能列出目录中的所有文件:
vector<string> scanDir( const string& dir )
Run Code Online (Sandbox Code Playgroud)
可以在内部调用自己(对于子目录).
我需要一种将返回值附加到调用者向量的简短方法.我脑子里有这样的东西(当然它不存在:():
vector<string> fileList;
//...
fileList.append( scanDir(subdirname) );
Run Code Online (Sandbox Code Playgroud)
我担心存储返回值并将其插入fileList会带来性能不佳.我的意思是:
vector<string> temp( scanDir(subdirname) );
copy( temp.begin(), temp.end(), back_inserter(fileList) );
Run Code Online (Sandbox Code Playgroud)
谢谢!
PS:我不是强迫自己使用矢量,任何其他同样表现良好的容器,并且可以阻止潜在的大型复制操作.
在a上调用insert成员函数时std::vector,它会reserve在"推回"新项目之前吗?我的意思是标准保证与否?
换句话说,我应该这样做:
std::vector<int> a{1,2,3,4,5};
std::vector<int> b{6,7,8,9,10};
a.insert(a.end(),b.begin(),b.end());
Run Code Online (Sandbox Code Playgroud)
或者像这样:
std::vector<int> a{1,2,3,4,5};
std::vector<int> b{6,7,8,9,10};
a.reserve(a.size()+b.size());
a.insert(a.end(),b.begin(),b.end());
Run Code Online (Sandbox Code Playgroud)
还是其他更好的方法?