Преобразование std::string в std::vector <char>
Я использую библиотеку, которая принимает данные как vector
of char
s. Мне нужно передать string
в библиотеку.
Я думаю об использовании конструктора std::vector
, который принимает итераторы для выполнения преобразования, но задавался вопросом, есть ли лучший способ сделать это?
/*Note: json_str is of type std::string*/
const std::vector<char> charvect(json_str.begin(), json_str.end());
Ответы
Ответ 1
Нет, это способ сделать это, непосредственно инициализируя вектор данными из строки.
Как отмечает @ildjarn в своем комментарии, если по какой-либо причине ваш буфер данных должен быть завершен с нулевой отметкой, вам нужно явно добавить его с помощью charvect.push_back('\0')
.
Также обратите внимание, что если вы хотите повторно использовать буфер, используйте функцию члена assign
, которая принимает итераторы.
Ответ 2
Ваш метод заполнения vector
в порядке - на самом деле, он, вероятно, лучше всего в большинстве случаев.
Просто чтобы вы знали, но это не единственный способ. Вы также можете просто скопировать содержимое string
в <<22 > . Это будет наиболее полезно, если у вас уже есть экземпляр vector
, или если вы хотите добавить больше данных в конец - или в любую точку, действительно.
Пример, где s
- std::string
, а v
- std::vector<char>
:
std::copy( s.begin(), s.end(), std::back_inserter(v));
Как и в случае с конструктором, если вам нужен нуль-терминатор, вам нужно будет вернуть его обратно:
v.push_back('\0');