2017-03-28 9 views
0

あなたは、ベクターのコピーを渡している私は、下記の機能をinpvecを使用しますが、私は、main関数内の関数を使用する場合イテレータを使用しても出力がなかったので、それは動作しませんでした...ベクトルで一連の入力をどのように取るべきですか?

#include <iostream> 
#include <vector> 
using namespace std; 

void inpvec(vector <int> a, int veclen){ 
    int b; 
    for(int i=0;i<veclen;i++){ 
     cin>>b; 
     a.push_back(b); 
    } 
} 

int main() 
{ 
    int n,j; 
    cin >>n; 
    vector <int> vac; 
    vector <int> pat; 
    vector <int>::iterator it; 
    inpvec(vac, n); 
    inpvec(pat, n); 
    for(it=vac.begin();it!=vac.end();it++){ 
     cout<<*it<<" "; 
    } 
    for(it=pat.begin();it!=pat.end();it++){ 
     cout<<*it<<" "; 
    } 
    return 0; 
} 
+0

という参照を変更します作る:平野変数対ポインタ/参照を。 'int b = 1;の違いを理解してみてください。 int a = b; a = 2; 'および' int a = 1; int * b =&a; b = 2;。これを確認[リンク](http://cpp.sh/8zj4v) –

答えて

4

あなたの機能

void inpvec(vector <int> a, int veclen) 

あなたは参照することにより、それを渡す必要があります

void inpvec(vector <int> a, int veclen) 

は、最初のパラメータaのコピーを作成します。呼び出し側のコードに違いは見られません。

それはあなたがC++の種類やメモリの性質を研究し、いくつかの良い時間を過ごして検討すべきである

void inpvec(vector <int> & a, int veclen) 
//      ^----- this 
2

ここに:

void inpvec(vector <int>& a, int veclen) 
________________________^_______________ 
関連する問題