[英]Converting std::string to std::vector<char>
我正在使用一個接受數據作為
char<\/code>
vector<\/code>的庫。
我需要將一個
string<\/code>傳遞給庫。
我考慮使用接受迭代器的
std::vector<\/code>構造函數來執行轉換 - 但想知道是否有更好的方法來做到這一點?
/*Note: json_str is of type std::string*/
const std::vector<char> charvect(json_str.begin(), json_str.end());
不,這就是這樣做的方法,直接用字符串中的數據初始化向量。
正如@ildjarn 在他的評論中指出的那樣,如果由於某種原因您的數據緩沖區需要以空值結尾,您需要使用charvect.push_back('\\0')
顯式添加它。
另請注意,如果您想重用緩沖區,請使用帶有迭代器的assign
成員函數。
您填充vector
方法很好——事實上,在大多數情況下它可能是最好的。
只是為了讓您知道,這不是唯一的方法。 您也可以簡單地將string
的內容復制到vector<char>
。 當您已經實例化了一個vector
,或者如果您想在末尾附加更多數據時,這將是最有用的 - 或者在任何時候,真的。
示例,其中s
是std::string
而v
是std::vector<char>
:
std::copy( s.begin(), s.end(), std::back_inserter(v));
與構造函數的情況一樣,如果您需要一個空終止符,那么您需要自己將其推回:
v.push_back('\0');
如果您需要終止 null,則可能值得考慮的替代方法是:
std::vector<char> charvect(json_str.c_str(), json_str.c_str() + json_str.size() + 1);
如果charvect
已經存在,你可以這樣做:
charvect.assign(json_str.c_str(), json_str.c_str() + json_str.size() + 1);
這可能比執行push_back('\\0')
更快,特別是如果 push_back 觸發內存重新分配。
你可以這樣做。
std::string s = "Hello World!";
std::vector<char> v(s.begin(), s.end());
for (const char &c: v)
std::cout << c;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.