2017-04-10 6 views
0

に私は第三 vector c{1,3,2,4}マージ機能二つのベクトル三

vector a{1,2}vector b{3,4} のような2つのベクトルをマージまたは結合しようとしています。

#include<vector> 
#include<iostream> 
using namespace std; 
vector<int> append(vector<int> a, vector<int> b) 
{ 
int n = a.size(); 
int m = b.size(); 
vector<int> c(n+m); 
int i; 
for(i=0; i<n;i++) 
    c[i]=a[i]; 
for(i=0;i<m;i++) 
    c[n+i]=b[i]; 

return c; 
} 
vector<int> merge(vector<int>a,vector<int>b) 
{ 

vector<int>c(a.size()+b.size()); 
int x=0; 
for(int i=0;i<a.size();i=+2){ 
    c.push_back(a[x]); 
    c.push_back(b[x]); 
    x++; 
} 
return c; 
} 
main() 
{ 
int input,input2; 
vector<int> one; 
cout<<"Give inputs for vetor #1. When done give -1 as input"<<endl; 
while((cin>>input)&& input!=-1) 
    one.push_back(input); 

vector<int> two; 
cout<<"Give inputs for vector #2. When done give -1 as input"<<endl; 
while((cin>>input2)&& input2!=-1) 
    two.push_back(input2); 
vector<int> three; 
three=merge(one,two); 
for(int i=0;i<three.size();i++) 
    cout<<three[i]<<endl; 

} 

私はこのコードを持っているが、出力が間違っている、それは出力

1 3 2 4

は私が「何にいくつかの助けを得ることができなければならないとき、それは

0 0 0 0 1 3

を出力マージ関数に間違っていますか? 私は検索を試みましたが、私を助けてくれた例は見つかりませんでした。 私はいくつかの例を見ましたが、うまく機能しませんでした。 私はベクトルcは4の代わりに6つの値を出力するので間違っていると思います。しかし、どうなっているのかは分かりません。どんな助けでも大歓迎です。

+0

これらのベクトルを参照渡しする必要があります。それ以外の場合はコピーを作成しています。 –

答えて

0

push_backメンバー関数は、ベクトルの最後に新しい要素を追加します。あなたはすでにあなたの例では4つの要素でベクトルをサイズにするので、push_backの呼び出しは、その長さもさらに増加し​​ます。

vector<int>c(a.size()+b.size()); 

結果は、それらの元4つの場所のように、(そのゼロの状態で)放置されていることです新しい値がベクトルの最後に追加されます。で開始するには、空のベクトルを初期化するであろう、次のようにcのあなたの宣言を変更します。おそらくあなたが狩りをしているバグです

vector<int>c; 

を。

+0

本当にありがとうございます。いつも一番簡単なことです。 – user1251268

関連する問題