2016-09-26 3 views
0

私は、新しく生成されたベクトルを取得し、mainの2つの関数を呼び出すことでグローバルベクトルに追加したいと考えています。私はこれを行う方法の大まかなアイデアを持っていますが、明らかにこれは正しくありません。C++の新機能であり、実際にはvector recycle..doを処理したくありません。Cを使用できない場合はポインタを使用する必要があります++ 11?これを行う最善の方法は何ですか?複数の関数間でC++でベクトルを返す最適な方法

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

参照渡しに最適な方法。 –

+3

'void main()' ...おそらく、 'namespace std;を使用していますが、' vector'を変数名として使用しています... – Jarod42

+0

ええ、私は名前空間stdを使っていたと仮定しています... – acbh

答えて

0

まず第一に、C++の中void main()は悪いです - それはint main()する必要があります。あなたがusing namespace std;可能性がある一方で

第二に、あなたはfunction1()で声明return vector;を持っている - それは可能ではないもあなたが何をしたいタイプを返そうと解釈することができますので、これは、また非常に悪いです。それが参照またはconst参照し、場合によって周りのベクトルを渡すために一般的に良いでしょう、

#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変数を使用していない。ここで

はあなたのコードのリファクタリングです状況が適切である場合は、クラスまたは名前空間にコードをラップする必要があります。

関連する問題