3 回答
TA贡献1865条经验 获得超7个赞
包含(容器,val)(非常简单,但很方便)。
template<typename C, typename T>
bool contains(const C& container, const T& val) {
return std::find(std::begin(container), std::end(container), val) != std::end(container);
}
remove_unstable(开始,结束,值)
一种更快的std :: remove版本,但它不保留其余对象的顺序。
template <typename T>
T remove_unstable(T start, T stop, const typename T::value_type& val){
while(start != stop) {
if (*start == val) {
--stop;
::std::iter_swap(start, stop);
} else {
++start;
}
}
return stop;
}
(在pod类型(int,float等)的向量的情况下,几乎所有对象都被删除了,std :: remove可能会更快)。
TA贡献1874条经验 获得超12个赞
通常,我会以向量的形式使用矢量,而没有特定的顺序(很明显,当我不需要快速的“设置此元素”检查时)。在这些情况下,调用delete()会浪费时间,因为它将对元素进行重新排序,而我不在乎顺序。这就是下面的O(1)函数派上用场的时候-只需将最后一个元素移到要删除的元素的位置即可:
template<typename T>
void erase_unordered(std::vector<T>& v, size_t index)
{
v[index] = v.back();
v.pop_back();
}
- 3 回答
- 0 关注
- 429 浏览
添加回答
举报