Как построить std::string из std::vector <char>?

За исключением (очевидного) построения строки стиля C сначала, а затем используя это для создания std::string, есть ли более быстрый/альтернативный/ "лучший" способ инициализировать строку из вектора символов?

Ответ 1

Что ж, лучше всего использовать следующий конструктор:

template<class InputIterator> string (InputIterator begin, InputIterator end);

что приведет к чему-то вроде:

std::vector<char> v;
std::string str(v.begin(), v.end());

Ответ 2

Я думаю, вы можете просто сделать

std::string s( MyVector.begin(), MyVector.end() );

где MyVector - ваш std::vector.

Ответ 3

С С++ 11 вы можете сделать std::string(v.data()) или, если ваш вектор не содержит '\0' в конце, std::string(v.data(), v.size()).

Ответ 4

std::string s(v.begin(), v.end());

Где v почти что-то итеративно. (В частности, begin() и end() должны возвращать InputIterators.)

Ответ 5

Просто для полноты, еще один способ - std::string(&v[0]) (хотя вам нужно убедиться, что ваша строка завершена нулем и std::string(v.data()) обычно предпочтительнее.

Разница заключается в том, что вы можете использовать предыдущую технику для передачи вектора в функции, которые хотят изменить буфер, что вы не можете сделать с .data().