За исключением (очевидного) построения строки стиля C сначала, а затем используя это для создания std::string, есть ли более быстрый/альтернативный/ "лучший" способ инициализировать строку из вектора символов?
Как построить std::string из std::vector <char>?
Ответ 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().