基于example code here我写了这个小例子(ideone Link):
#include <iostream>
#include <algorithm>
#include <string>
int main()
{
std::string s = "foo123bar456wibble";
auto end = std::unique(s.begin(), s.end(), [](char l, char r){
return std::isdigit(l) && std::isdigit(r);
});
// What does s hold?
std::cout << std::string(s.begin(), end) << '\n';
}
我的输出是:
foo1bar4wibble
标准是否保证了这种行为,还是可以接受?
foo2bar6wibble
链接的cppreference页面显示:
通过移动范围中的元素来完成移除,使得要擦除的元素被覆盖。
但这是规范性文本还是仅仅建议实施?
从[first,last]范围内的每个连续等效元素组中删除除第一个元素之外的所有元素。
但这又是规范性的吗?
答案 0 :(得分:6)
效果:对于非空范围,除去{{1}}范围内的迭代器
i
引用的每个连续等效元素组中的第一个元素以外的所有元素。下列 条件成立:[first + 1,last)
或*(i - 1) == *i
。