вернуть базовый массив из вектора - PullRequest
3 голосов
/ 04 марта 2009

Будет ли освобожден массив, и если да, то каков обходной путь?

double * GetArrayFromVector( std::map<std::string, double> m, char ** names, int count )
{ 
    if(!names) return 0;

    std::vector<double> vec(m.size());
    for (int i=0; i<count; ++i)
    { 
       if(!names[i]) return 0;
       std::map<std::string, double>::iterator iter=m.find(name[i]);
       if(iter!=m.end())
          vec.push_back(iter->second);
       else
         return 0;   
    }

    return &vec[0]; 
}

Большое спасибо

Ответы [ 12 ]

0 голосов
/ 04 марта 2009

Да, вектор (и хранилище данных, которое он хранит) будет освобожден после завершения функции.

Почему вы создаете вектор? Если вам нужен массив, просто создайте и заполните один из них ..

double * GetArrayFromVector( std::map<std::string, double> m, char * names[], int count )
{ 
    if(!names) return 0;

    double* vec = new double[m.size()];
    int j = 0;
    for (int i=0; i<count; ++i)
    { 
       if(!names[i]) return 0;
       std::map<std::string, double>::iterator iter=m.find(name[i]);
       if(iter!=m.end())
          vec[j++] =iter->second;
       else
         return 0;   
    }

    return vec;
} 
0 голосов
/ 04 марта 2009

Вы можете передать его по ссылке или создать / удалить, но после публикации ваш вектор будет уничтожен после возврата из функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...