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

时间:2011-11-23 19:12:52

标签: c++

我使用的库接受vector char的数据库。我需要将string传递给库。

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

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

3 个答案:

答案 0 :(得分:30)

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

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

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

答案 1 :(得分:14)

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

但是,你知道,这不是唯一的方法。您也可以简单地将string的内容复制到vector<char>。如果您已经实例化了vector,或者想要将更多数据附加到最后 - 或者在任何时候,那么这将非常有用。

示例,其中sstd::stringvstd::vector<char>

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

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

v.push_back('\0');

答案 2 :(得分:0)

如果您需要终止空值,可能值得考虑的替代方法是:

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 触发内存重新分配的情况下。