0

ベクトルについての知識を深めるために、ベクトルをいじっています。空のベクターvector<string> contents; を作成しました (と思います): アクセサー メソッドを作成しました (と思います):vector<string> getContents(); メソッドは次のようになります。

    vector<string> Album::getContents()
    {
        cout << "\nAlbum Contents:\n\n" << endl;
        for(vector<string>::iterator iter = contents.begin(); 
                                     iter !=contents.end(); iter++)
           {
               cout << *iter << endl;
           }
    }

これは適切なアクセサメソッドですか、それとも私は何かを考えすぎていますか? mygetContentsは何も返さず、代わりに出力するため...

これが有効な方法であると仮定すると、ベクトル コレクションの内容を返すより良い方法は何でしょうか? ありがとう。

編集:私はそれをコンパイルしたばかりで、私のメソッドは何かを返す必要があります...したがって、私のメソッドは無意味であり、forループを使用してJava配列と同様にアイテムごとにベクトルコレクションを返すことができるはずだと思いますか? 私は知らないよ。

4

1 に答える 1

3

ほぼ適合です。ただし、メソッドは何かを返す必要があります。ベクトルのコピーを返すように定義されているため、次のコピーを返すことで機能しますcontents

vector<string> Album::getContents()
{
    cout << "\nAlbum Contents:\n\n" << endl;
    for(vector<string>::iterator iter = contents.begin(); 
                                 iter !=contents.end(); iter++)
    {
           cout << *iter << endl;
    }
    return contents;  // return a copy of contents
}

呼び出し元にベクターのコピーを取得させるか、それとも参照を取得できるようにするかを決定する必要があります。そうする場合、メソッドは次のいずれかまたは両方である必要があります。

vector<string>& getCOntents();    // caller can get a read-write reference to contents
const vector<string>& getContents() const; // caller can get a read only reference to contents.

ただし、クラスの内部への参照を提供することは、管理が難しい場合があることに注意してください。少なくとも、Album参照が呼び出し元によって取得されたオブジェクトが、少なくとも参照と同じくらい存続することを確認する必要があります。

于 2012-12-08T17:59:14.560 に答える