2011-11-23 109 views
29

我正在使用一個接受數據的庫,作爲vectorchar s。我需要通過string到圖書館。將std :: string轉換爲std :: vector <char>

我想到了使用std::vector構造函數,它接受迭代器來執行轉換 - 但想知道是否有更好的方法呢?

/*Note: json_str is of type std::string*/ 
const std::vector<char> charvect(json_str.begin(), json_str.end()); 
+3

你只是好奇,還是你真的測量和確定你的程序的重要部分是用於複製字符串? –

回答

25

不,就是這樣做,直接用字符串中的數據初始化矢量。

正如@ildjarn在他的評論中指出的那樣,如果由於某種原因你的數據緩衝區需要以空終止,你需要明確地用charvect.push_back('\0')加上它。

另請注意,如果要重新使用緩衝區,請使用帶有迭代器的assign成員函數。

+9

請注意,如果數據需要以空值終止,則必須手動推回終止空值。 – ildjarn

+6

@ildjarn:好點。然而,數據緩衝區被空終止會很奇怪,但你永遠不會知道...... – Xeo

+0

請注意,由於C++ 11的'std :: string'被強制在其內部緩衝區中使用以空字符結尾的字符串。所以push_back不再是必需的。 – Manu343726

11

您的填充vector的方法很好 - 事實上,它在大多數情況下可能是最好的。

只是爲了讓你知道,但它不是唯一的方法。您也可以簡單地將string的內容複製到vector<char>。如果您已經實例化了vector,或者如果您希望將更多數據附加到結尾 - 或者在任何時候,這將會非常有用。

例如,在sstd::stringvstd::vector<char>

std::copy(s.begin(), s.end(), std::back_inserter(v)); 

與構造情況下,如果你需要一個空終止,那麼你就需要推動這一回自己:

v.push_back('\0'); 
相關問題