有没有更好的方法可以将字符串 vector 转换为字符串 vector ,并且字符串之间的终止符为零。

因此,如果我有一个包含以下字符串"test","my","string"的 vector ,那么我想接收一个chars vector :"test\0my\0string\0"

目前,此代码可以正常工作,但是有没有更好(更漂亮)的解决方案?

std::vector<std::string> string_array = {"test", "my", "string"};
std::vector<char> buffer_temp;
for (auto &str : string_array)
{
    for (auto &chr : str)
    {
        buffer_temp.push_back(chr);
    }
    buffer_temp.push_back('\0');
}

最佳答案

永远不要忘记 std::vector::insert 方法,使用该方法可以将示例简化如下:

std::vector<std::string> string_array = { "test", "my", "string" };
std::vector<char> buffer_temp;

for(auto& s : string_array)
    buffer_temp.insert(buffer_temp.end(), s.c_str(), s.c_str() + s.size() + 1);
std::string::c_str返回一个以null终止的字符数组的指针,因此您不必在'\0'的每个元素的末尾附加一个额外的string_array

在下面的评论中,您也可以使用std::string迭代器,并且由于std::string具有随机访问迭代器,因此您可以执行以下操作:
for(auto& s : string_array)
    buffer_temp.insert(buffer_temp.end(), s.begin(), s.end() + 1);

09-10 04:39
查看更多