将std :: string转换为std :: vector <char>

Hom*_*lli 41 c++

我使用的接收数据作为图书馆vectorchar秒.我需要传递string给图书馆.

我想使用std::vector接受迭代器的构造函数来执行转换 - 但是想知道是否有更好的方法呢?

/*Note: json_str is of type std::string*/
const std::vector<char> charvect(json_str.begin(), json_str.end()); 
Run Code Online (Sandbox Code Playgroud)

Xeo*_*Xeo 31

不,这就是这样做的方法,用字符串中的数据直接初始化向量.

正如@ildjarn在他的评论中指出的那样,如果由于某种原因你的数据缓冲区需要以空值终止,你需要明确地添加它charvect.push_back('\0').

另请注意,如果要重用缓冲区,请使用assign带有迭代器的成员函数.

  • 请注意,如果数据需要以空值终止,则必须手动推回终止空值. (9认同)
  • @ildjarn:好点.但是,数据缓冲区为空终止会很奇怪,但你永远不知道...... (6认同)
  • @ Manu343726:它仍然是.仅仅因为它被强制内部空终止并不会改变`'\ 0'`不是字符串元素的一部分的事实.如果你遍历字符串,你将得不到''\ 0'. (5认同)

Joh*_*ing 15

你的填充方法vector很好 - 事实上,在大多数情况下它可能是最好的.

但是,你知道,这不是唯一的方法.您也可以简单地将stringin 的内容复制到vector<char>.当你有一个vector已经实例化的,或者你想要在末尾附加更多数据时 - 或者在任何时候,真的,这将是最有用的.

例如,sa std::stringva是std::vector<char>:

std::copy( s.begin(), s.end(), std::back_inserter(v));
Run Code Online (Sandbox Code Playgroud)

与构造函数的情况一样,如果你需要一个null-terminator,那么你需要自己推回:

v.push_back('\0');
Run Code Online (Sandbox Code Playgroud)