Как конвертировать векторк вектору <string>/ строка - PullRequest
8 голосов
/ 01 августа 2011

У нас есть устаревший метод, который возвращает vector символьных указателей, т.е. vector<char *>.Теперь мне нужно обработать только строки (std::string).Как я могу это сделать?

Этот вопрос может показаться простым, но я столкнулся с парой веб-сайтов, на которых изображено, что подобные соображения могут привести к утечкам памяти.получить vector<string> или даже строку без утечек памяти.Как я могу это сделать?

Ответы [ 3 ]

20 голосов
/ 01 августа 2011

Преобразование довольно просто:

std::vector<char*> ugly_vector = get_ugly_vector();
std::vector<std::string> nice_vector(ugly_vector.begin(), ugly_vector.end());

Однако, как только вы это сделаете, вам все равно нужно убедиться, что объекты, на которые указывают указатели в ugly_vector, правильно уничтожены. То, как вы это сделаете, зависит от старого кода, который вы используете.

2 голосов
/ 01 августа 2011

Использование std::copy:

using namespace std;
vector<char*> v_input;
...
// fill v_input
...
vector<string> v_output;

v_output.resize(v_input.size());
copy(v_input.begin(), v_input.end(), v_output.begin());
0 голосов
/ 01 августа 2011

ну, в зависимости от требований к производительности, вы можете просто построить std::string по мере необходимости.Как это:

for(std::vector<char*>::const_iterator it = v.begin(); it != v.end(); ++it) {
    std::string s = *it;

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