我使用的库接受vector
char
的数据库。我需要将string
传递给库。
我考虑使用接受迭代器的std::vector
构造函数来执行转换 - 但是想知道是否有更好的方法呢?
/*Note: json_str is of type std::string*/
const std::vector<char> charvect(json_str.begin(), json_str.end());
答案 0 :(得分:30)
不,这就是这样做的方法,用字符串中的数据直接初始化向量。
正如@ildjarn在他的评论中指出的那样,如果由于某种原因你的数据缓冲区需要以空值终止,你需要用charvect.push_back('\0')
明确地添加它。
另请注意,如果要重用缓冲区,请使用带有迭代器的assign
成员函数。
答案 1 :(得分:14)
填充vector
的方法很好 - 事实上,在大多数情况下,它可能是最好的。
但是,你知道,这不是唯一的方法。您也可以简单地将string
的内容复制到vector<char>
。如果您已经实例化了vector
,或者想要将更多数据附加到最后 - 或者在任何时候,那么这将非常有用。
示例,其中s
是std::string
而v
是std::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 触发内存重新分配的情况下。