我是用的lower_bound与prev来找到大于等于与小于的元素 边界处理比较麻烦 这里为了方便表述将指向最后小于val与第一个大于等于val的迭代器代写为it1 it2(易得it1为it2的前一个迭代器)
- 1.越界 有两种情况
- 1.(1) 所有元素小于val it2指向end 只能选择it1
- 1.(2) 所有元素大于val it2指向begin 无法正常对begin迭代器进行逆操作然后报错 只能将it1初始化为end然后在后面特殊处理
如下
auto it1=s.lower_bound(val);
auto it2 = (it1 != s.begin()) ? prev(it1) : s.end();
if(it1==s.end())
{
cout << *it2 << '\n';
s.erase(it2);
}
else if(it2==s.end() || abs(*it1-val)<abs(*it2-val))
{
cout << *it1 << '\n';
s.erase(it1);
}
else
{
cout << *it2 << '\n';
s.erase(it2);
}