2011-08-14 7 views
0

私はコードのビットを理解する助けが必要です。与えられた文字列を持つベクトルをロードし、ポインタを返す関数が必要です。私はそれを使って複数のベクトルを生成し、それを表示するためにポインタを使います。C++でベクトルへのポインタを返す関数を設定するにはどうすればよいですか?

私は、関数によるポインタの戻りとベクトルの後の表示の両方を設定する方法がわかりません。 //ここにヘルプが必要な行だけに提案してください

#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 

int pointerReturner (string str1, string str2) //HELP NEEDED HERE 
{ 
    vector<string> vList; 
    vList.push_back(str1); 
    vList.push_back(str2); 
    return vList; //HELP NEEDED HERE 
} 

int main(int argc, char* argv[]) { 

    vector<string> vMakeList1; 
    vMakeList1 =pointerReturner("Honda","Toyota");//HELP NEEDED HERE 
    for (vector<string>::iterator n=vMakeList1.begin(); n!=vMakeList1.end();++n) 
    { 
     cout<<*n<<endl; 
    } 

    vector<string> vMakeList2; 
    vMakeList2=pointerReturner("Chrysler","Ford");//HELP NEEDED HERE 
    for (vector<string>::iterator n=vMakeList2.begin(); n!=vMakeList2.end();++n) 
    { 
     cout<<*n<<endl; 
    } 

    cin.get(); 
    return 0; 
} 

答えて

1

新しい演算子を使用してベクトルを動的に割り当てる必要があります。さもなければ、ベクトルは関数pointerReturnerが終了した後に破壊される単なる自動変数にすぎません。また、この関数の戻り値の型をintからベクトルへのポインタ(vector *)に変更する必要があります。 しかし、オブジェクトを動的に割り当てる場合は、delete演算子を使って明示的に破棄する必要があります。そうしないと、割り当てられたメモリが決して解放されず、メモリリークが発生します。

#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 

vector<string>* pointerReturner (string str1, string str2) 
{ 
    vector<string> *vList = new vector<string>(); 
    vList->push_back(str1); 
    vList->push_back(str2); 
    return vList; 
} 

int main(int argc, char* argv[]) { 

    vector<string> *vMakeList1; 
    vMakeList1 = pointerReturner("Honda","Toyota"); 
    for (vector<string>::iterator n=vMakeList1->begin(); n!=vMakeList1->end();++n) 
    { 
     cout<<*n<<endl; 
    } 
    delete vMakeList1; 

    vector<string> *vMakeList2; 
    vMakeList2=pointerReturner("Chrysler","Ford"); 
    for (vector<string>::iterator n=vMakeList2->begin(); n!=vMakeList2->end();++n) 
    { 
     cout<<*n<<endl; 
    } 
    delete vMakeList2; 

    cin.get(); 
    return 0; 
} 
+0

ありがとうございました!魅力的な作品! – nebulus

+1

私の編集も参照してください。もう必要がなくなったら割り当てられたベクターを削除してください。 – ciamej

+0

に置き換え、で置き換えることができますか? – nebulus

関連する問題