簡體   English   中英

"將 std::string 轉換為 std::vector<char>"

[英]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 ,或者如果您想在末尾附加更多數據時,這將是最有用的 - 或者在任何時候,真的。

示例,其中sstd::stringvstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM