更容易对字符串副本执行迭代或算术运算

时间:2014-08-31 12:04:59

标签: c++ string iterator

我有一个字符串(result)的副本(format_),然后我在原始字符串上使用std::find,但我不能在字符串副本上使用由此获得的迭代器。这导致一些繁琐的代码。例如:

std::string result = format_;
auto it = std::find(format_.begin(), format_.end(), '%');
auto diff = it - format_.begin();
auto pos_it = result.begin() + diff;
result.insert(result.erase(pos_it, pos_it + 2), right.begin(), right.end());

这里如果我尝试将它用作迭代器而不仅仅是数学,我会得到分段错误。如果两个字符串相同,为什么你不能分享"迭代器?

1 个答案:

答案 0 :(得分:0)

你不能在字符串之间共享迭代器(即使它们是相同的),因为它们占用了不同的内存位置,并且迭代器可能在内部使用内存指针来访问字符串'元素直接。

作为替代方案,您可以将索引位置偏移用于字符串。

也许是这样的:

int main()
{
    std::string right = "INSERT";
    std::string format_ = "some % text";

    auto pos = format_.find('%', 0); // pos is std::string::size_type (not iterator)

    std::string result = format_;

    if(pos != std::string::npos)
        result.replace(pos, 1, right);

    std::cout << result << '\n';
}