3 回答

TA貢獻1865條經(jīng)驗 獲得超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(開始,結(jié)束,值)
一種更快的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條經(jīng)驗 獲得超12個贊
通常,我會以向量的形式使用矢量,而沒有特定的順序(很明顯,當(dāng)我不需要快速的“設(shè)置此元素”檢查時)。在這些情況下,調(diào)用delete()會浪費時間,因為它將對元素進行重新排序,而我不在乎順序。這就是下面的O(1)函數(shù)派上用場的時候-只需將最后一個元素移到要刪除的元素的位置即可:
template<typename T>
void erase_unordered(std::vector<T>& v, size_t index)
{
v[index] = v.back();
v.pop_back();
}
- 3 回答
- 0 關(guān)注
- 450 瀏覽
添加回答
舉報