【发布时间】:2021-08-11 08:19:12
【问题描述】:
我有这段代码。此功能不会复制相邻的重复字符。它只保留其中一个。为了更短,我决定将 std::prev 与 iterator.begin() 一起使用。我知道这是一个(非常)不好的做法,我来自 C,但在 C++ 中有些不同。未定义的行为几乎不存在。告诉我,伙计们。我可以很容易地改变我的方法。如果你有更快的方法,我也很感兴趣。
string suppDouble(const string& str)
{
if (str.size() <= 1) return str;
string token;
for (auto it = str.cbegin(); it != str.cend(); it++)
{
if (*(std::prev(it)) != *it) token.push_back(*it);
}
return token;
}
【问题讨论】:
-
这是纯 UB。你不能在
begin之前访问元素。
标签: c++ iterator undefined-behavior