第5条 区间成员函数优先于与之对应的单元素成员函数
- 区间创建
container::container(begin, end)
- 区间插入
void container::insert(position, begin, end)
- 区间删除
//序列容器
iterator container::erase(begin, end)
//关联容器
void container::erase(begin, end)
- 区间赋值
void container::assign(begin, end)
第9条 慎重选择删除的方法
- 连续内在窗口,最好的办法是使用erase-remove习惯用法
c.erase(remove(c.begin(), c.end(), 1963), c.end())
//满足特定条件的的所有对象
v1.erase(std::remove_if(v1.begin(), v1.end(), [](int v)
{
return v==2 || v==3;
}), v1.end());
for(auto it = v1.begin(); it != v1.end(); )
{
if (*it == 2 || *it == 3)
{
it = v1.erase(it);
}
else{
it++;
}
}
- 对于list,成员函数remove更加有效
c.remoe(1963)
- 对于标准关联窗口(set, multiset, map, multimap),正确方法是调用erase
c.erase(1963)
//满足特定条件的的所有对象
for(auto it = c.begin(); it != c.end(); )
{
if (it->first == 2 || it->first == 3)
{
c.erase(it++);
}
else{
++it;
}
}
第17条 使用"swap技巧"除去多余的容量
vector<int>(v).swap(v);
第23条 考虑用排序的vector替代关联窗口
//代码骨架
sort(v.begin, v.end)
if (binary_search(v.begin, v.end)) ...
auto i = lower_bound(v.begin, v.end)
auto range = equal_range(v.begin, v.end)
if (range.first != range.second)
{
qDebug()<<"find, distance:"<< distance(range.first, range.second);
}
网友评论