2016-10-07 1 views
0

WennWie std konvertieren: wstring std :: vector <wchar_t>

std::wstring word = L"xxxxxxx"; 

Dann, wie die folgende Umwandlung zu tun?

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

Mögliche Duplikat von [Wie ein Vektor zu einem wchar \ 't konvertieren \ * \ *?] (http://stackoverflow.com/questions/17916842/how-to-convert-a-vectorwstring-to-a-wchar-t) –

+1

Ich glaube nicht, dass dies ein realisierbares dupliziertes Ziel ist. – krzaq

+1

@Anjan Das ist eine ganz andere Frage. – juanchopanza

Antwort

3

initialisieren Sie es einfach mit einem Paar von Iteratoren:

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

Die oben nicht den Nullabschluss hinzufügen (aber, wenn die Zeichenfolge ein enthält, wird es kopiert werden). Wenn Sie es möchten, initialisieren Sie den Vektor mit einem Paar von Zeigern auf die zugrunde liegenden String-Daten statt:

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

Denken Sie daran, 1 für die Nullabschluss hinzufügen, sonst wird der Effekt der gleiche wie im ersten Beispiel.

+0

Sehr schön, aber ich würde ausdrücklich auf die Behandlung des Null-Terminator hinweisen, wenn ich du wäre. – Bathsheba

+0

@Bathsheba danke, fügte es hinzu. – krzaq

1

Es gibt eine Möglichkeit, es auf einmal zu erstellen, einschließlich des Nullabschlusszeichens, indem Sie c_str() oder data() aus dem wstring verwenden. (In C++ 11 sind beide garantiert null-terminiert), und dann wird size() + 1 für die Endposition hinzugefügt, was ebenfalls garantiert ein wohldefiniertes Verhalten ist.

So:

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

(oder Nutzungsdaten() anstelle von c_str(), aber nur C++ 11 an)

+0

Was ist das richtige Verhalten auf dieser Website? Meine Antwort ist weniger korrekt als Ihre, wenn Sie den Null-Terminator haben wollen, aber wenn ich ihn editiere, um ihn zu integrieren, wird er dann als das Richtige betrachtet oder als Plagiat/Diebstahl? – krzaq

+1

Das richtige Verhalten auf dieser Site besteht darin zu versuchen, eine Antwort zu präsentieren, so dass eine zukünftige Person, die mit derselben Frage auf die Seite kommt, die Lösung finden kann. Es geht nicht um uns und unseren Ruf (etwas, das ich aufhörte, mich zu kümmern, sobald ich zu 20K kam) – CashCow

+0

Ok, danke für das Erklären. – krzaq

Verwandte Themen