2011-11-23 108 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'); 
相关问题