2016-10-07 3 views
0

どのようにSTDを変換する方法:はstd :: wstringのために、ベクター<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()); 

上記は、NULLターミネータを追加しません(ただし、文字列に1つが含まれている場合、それがコピーされます)。あなたがそれをしたい場合は、代わりに基本となる文字列データへのポインタのペアでベクトルを初期化します。

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

がnullターミネータのための1を追加することを忘れないでください、そうでなければ効果は最初の例と同じになります。

+0

非常にいいですが、私があなたであれば、ヌルターミネーターの治療について明示しておきます。 – Bathsheba

+0

@Bathshebaありがとう、それを追加しました。 – krzaq

1

wstringのc_str()またはdata()を使用してヌルターミネータを含めて一度に作成する方法があります。 (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

関連する問題