在多个函数之间返回和在c ++中分配向量的最佳方法

时间:2016-09-26 19:51:23

标签: c++ vector

我希望得到一个新生成的向量,并通过调用main中的两个函数添加到一个全局向量中。我对如何做到这一点有一个粗略的想法,但显然这是不对的。对c ++来说很新,我真的不想处理向量回收...如果我不能使用C我必须使用指针++ 11?什么是最好的方法呢?

void main(){
  vector <int> newVector = function1 ();
  addVector (newVector);
}

vector <int> function1 (){
   ....
   return returnedVector
}

void addVectors (vector <int> incomingVector){
   globalVector.insert( globalVector.end(), incomingVector.begin(), incomingVector.end());
}

1 个答案:

答案 0 :(得分:0)

首先,c ++中的void main()很糟糕 - 它应该是int main()

其次,return vector;中的语句function1()虽然您可能using namespace std; - 但这也很糟糕,因为它可以被解释为尝试返回不属于的类型可能也不想做什么。

以下是您的代码的重构:

#include <vector>
std::vector<int> function1(); // declaration
void add_vectors(std::vector<int>& ov, const std::vector<int>& iv);
int main() {
    std::vector<int> overall_vec;
    std::vector<int> vec = function1();
    add_vector(overall_vec, vec);
}
std::vector<int> function1() { // definition
    std::vector<int> rtnvec;
    // fill rtnvec with some values
    return rtnvec;
}
// insert incoming_vec to end of overall_vec
void add_vectors(std::vector<int>& overall_vec, const std::vector<int>& incoming_vec) {
    overall_vec.insert(overall_vector.end(), incoming_vec.begin(), incoming_vec.end());
}

请注意,我们尚未在global variables are generally quite bad处使用全局std::vector变量,通常情况下,当您需要时,通过引用或const引用传递向量通常会更好如果情况适合,则将代码包装在类或命名空间中。