2011-08-14 32 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

您必须使用new运算符动态分配向量。否则,vector只是一个自动变量,在函数pointerReturner结束后被销毁。您还必须将此函数的返回类型从int更改为指向vector(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

相关问题