2016-10-07 2 views
0

ЕслиКак конвертировать зЬй: wstring в StD :: вектор <wchar_t>

std::wstring word = L"xxxxxxx"; 

Тогда как сделать следующее преобразование?

std::vector<wchar_t> chars = word; 
+4

Возможный дубликат [Как преобразовать вектор к WCHAR \ _t \ * \ *?] (http://stackoverflow.com/questions/17916842/how-to-convert-a-vectorwstring-to-a-wchar-t) –

+1

Я не думаю, что это жизнеспособная повторяющаяся цель. – krzaq

+1

@Anjan Это совершенно другой вопрос. – juanchopanza

ответ

3

Просто инициализировать его с парой итераторов:

std::vector<wchar_t> chars(word.begin(), word.end()); 

выше не добавит нулевой терминатор (но если строка содержит один, он будет скопирован). Если вы хотите, инициализировать вектор с парой указателей на нижележащие данные строки вместо:

std::vector<wchar_t> chars(word.c_str(), word.c_str() + word.size() + 1); 

Не забудьте добавить 1 для нулевого терминатора, в противном случае эффект будет таким же, как и в первом примере.

+0

Очень приятно, но я был бы откровенен в отношении лечения нуль-терминатора, если бы был вами. – Bathsheba

+0

@Bathsheba спасибо, добавил. – krzaq

1

Существует способ создать его за один раз, включая нулевой терминатор, используя c_str() или data() из wstring. (В C++ 11 оба гарантированы как завершающие нуль), а затем добавление size() + 1 для конечной позиции, также гарантированное корректное поведение.

Таким образом:

std::vector<wchar_t> chars(word.c_str(), word.c_str() + word.size() + 1); 

(или использовать данные() вместо c_str(), но только C++ 11 и далее)

+0

Что считается правильным поведением на этом сайте? Мой ответ менее корректен, чем ваш, если вы хотите использовать нулевой терминатор, но если я его отредактирую, чтобы включить ваши, будет ли это правильным занятием или плагиатом/воровством? – krzaq

+1

Правильное поведение на этом сайте - попытаться представить ответ таким образом, что будущий человек, пришедший на сайт с тем же вопросом, сможет найти решение. Речь идет не о нас и о нашей репутации (что-то я перестала заботиться, как только я добрался до 20K) – CashCow

+0

Хорошо, спасибо за объяснение. – krzaq

Смежные вопросы