我必须在C ++中创建一个函数/方法来实现合并排序,它将两个向量作为输入并将结果存储在另一个向量中。这是这种功能的最佳方法:
建议使用以下哪种方法。
答案 0 :(得分:3)
typedef std::vector<int> int_vector;
int_vector get_vector() {
int_vector vect;
std::generate_n(std::back_inserter(vect), 100, std::random);
return vect;
}
int main() {
int_vector vect = get_vector();
// do smth
}
应该优化get_vector()函数的vect变量。编译器转换get_vector方法,以便main中的vect变量作为指向它的指针传递,因此不需要复制。这称为NRVO。但是,标准不保证这一点,旧版本不支持。如果你想要一个保证的方法没有应对,请传递一个参考:
typedef std::vector<int> int_vector;
int_vector get_vector(int_vector& vect) {
std::generate_n(std::back_inserter(vect), 100, std::random);
return vect;
}
int main() {
int_vector vect;
get_vector(vect);
// do smth
}
但是,恕我直言,这是编译器的工作。
更新:如果您的编译器支持c ++ 11,即使它无法进行nrvo优化,也会在第一个示例中移动vector,而不是复制。
答案 1 :(得分:-1)
您还可以创建参考以避免不必要的复制:
typedef vector<int> MyVector;
MyVector addVectors(const MyVector& vec1, const MyVector& vec2)
{
MyVector result;
if ( vec1.size() == vec2.size() )
for (size_t i = 0; i < vec1.size(); i++)
result.push_back(vec1[i]+vec2[i]);
return result;
}
int main (int argc, char *argv[])
{
MyVector v1 = {1,2,3,4};
MyVector v2 = {5,6,7,8};
const MyVector& result = addVectors(v1,v2);
return 0;
}