从方法返回结果的最佳方法

时间:2014-02-08 07:15:32

标签: c++

我必须在C ++中创建一个函数/方法来实现合并排序,它将两个向量作为输入并将结果存储在另一个向量中。这是这种功能的最佳方法:

  1. 返回指向结果向量的指针。
  2. 返回结果向量。
  3. 在函数的参数列表中包含第三个向量以将结果放入。
  4. 建议使用以下哪种方法。

2 个答案:

答案 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;
    }