2016-04-22 7 views
3

なぜベクターのサイズが0ですか?修正ベクトルが参照によって返される

#include <iostream> 
#include<vector> 
using namespace std; 
class A 
{ 

    public: 
     vector<int> T; 
     const vector<int>& get(){ 
      return T; 
     } 
     void print(){ 
      cout<< " size is "<<T.size(); 
      // cout<<" \nelements are %d "<<T[0]; 
     } 
}; 
int main() 
{ 
    cout << "Hello World" << endl; 
    A ob; 
    vector<int> temp = ob.get(); 
    temp.clear(); 
    temp.push_back(3); 
    temp.push_back(5); 

    ob.print(); 
    return 0; 
} 
+0

'const vector &get()'の代わりに、 'とget()const'をやりとりしましたか? – Eekan

答えて

4

これは何も起こっていないからです。まだ空です。

tempにベクターのコピーを作成し、元のクラスメンバーではなくコピーを変更しました。あなたは、参照を使用する必要があります。

vector<int> &temp = ob.get(); 

あなたはget()から参照を返すされているので、あなたが参照に割り当てる必要があります。そうでない場合は、オブジェクトのコピーを作成するだけです。

EDIT:また、constの参照ではなく、可変参照を返すようにget()を変更してください。

+2

'get()'は** const **参照を返すことに注意してください。これは**非const **参照に割り当てることはできません。 'get()'のシグネチャは、上記のコード(この問題の正しい解です)が正しくコンパイルされるように、戻り値に 'const'を落とす必要があります。 –

3

Aクラスの内側にあるvectorは変更していません。 get()は、あなたがそのようにvectorコピーが作成されている、非参照変数に代入されている(のconst!)の参照を返します。その後、コピーを修正していますが、オリジナルを印刷しています。

あなたが代わりにこれを実行する必要があります。

#include <iostream> 
#include <vector> 

using namespace std; 

class A 
{ 
    public: 
     vector<int> T; 

     vector<int>& get(){ 
      return T; 
     } 

     void print(){ 
      cout << " size is " << T.size(); 
      // cout << " \nelements are %d " << T[0]; 
     } 
}; 

int main() 
{ 
    cout << "Hello World" << endl; 

    A ob; 
    vector<int> &temp = ob.get(); 
    temp.clear(); 
    temp.push_back(3); 
    temp.push_back(5); 

    ob.print(); 
    return 0; 
} 
2

2つの問題を。

最初に、A::get()メソッドはメンバへのconst参照を返します。 const参照を通じてベクトルを変更することはできません。

第2に、戻り値のコピーだけであるtempベクトルを変更しています。

関連する問題