Как настроить функцию, которая возвращает указатель на вектор в C ++? - PullRequest
0 голосов
/ 14 августа 2011

Мне нужна помощь в поиске битов кода.Мне нужна функция, которая загружает вектор с заданными строками и возвращает указатель.Я планирую использовать его для генерации нескольких векторов, а затем использовать указатель для их отображения.

Я не уверен, как настроить возврат указателя функцией и последующее отображение векторов.Пожалуйста, вносите предложения только в те строки, которые содержат // HELP NEEDED HERE

#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 Ответ

1 голос
/ 14 августа 2011

Вы должны выделить вектор динамически, используя оператор new. В противном случае вектор - это просто автоматическая переменная, которая уничтожается после завершения функции 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...