最快的报价 - 逃避实施?

Joe*_*Joe 5 c++ string replace escaping

我正在研究一些规范化大量数据的代码.在处理结束时,将许多key ="value"对写出到文件中.

"值"部分可以是任何东西,因此在输出点,值必须具有任何嵌入式引号转义为\".

现在,我正在使用以下内容:

outstream << boost::regex_replace(src, rxquotesearch, quoterepl);
// (where rxquotesearch is  boost::regex("\"")  and quoterepl is "\\\\\"")
Run Code Online (Sandbox Code Playgroud)

但是,gprof显示我将大部分执行时间花在这个方法上,因为我必须为每一行的每个值调用它.

我很好奇是否有比这更快的方法.我不能使用std :: replace,因为我用两个替换一个字符.

谢谢你的建议.

Joh*_*ica 6

如果速度是一个问题,你应该使用手写功能来做到这一点.请注意reserve(),尝试将内存(重新)分配保持在最低限度.

string escape_quotes(const string &before)
{
    string after;
    after.reserve(before.length() + 4);

    for (string::size_type i = 0; i < before.length(); ++i) {
        switch (before[i]) {
            case '"':
            case '\\':
                after += '\\';
                // Fall through.

            default:
                after += before[i];
        }
    }

    return after;
}
Run Code Online (Sandbox Code Playgroud)