Подтвердить что ты не робот

Преобразование 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()); 
4b9b3361

Ответ 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');