为了账号安全,请及时绑定邮箱和手机立即绑定

您使用哪些C ++标准库包装函数?

您使用哪些C ++标准库包装函数?

C++
湖上湖 2019-12-09 10:58:56
今天早上问的这个问题使我想知道您认为C ++标准库中缺少哪些功能,以及如何通过包装函数来填补空白。例如,我自己的实用程序库具有用于矢量附加的此功能:template <class T>std::vector<T> & operator += ( std::vector<T> & v1,                               const std::vector <T> & v2 ) {    v1.insert( v1.end(), v2.begin(), v2.end() );    return v1;}这个用于清除(或多或少)任何类型的类型-对于诸如std :: stack之类的东西特别有用:template <class C>void Clear( C & c ) {    c = C();}我还有更多,但是我对您使用的是哪个感兴趣?请限制对包装函数的回答-即最多两行代码。
查看完整描述

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可能会更快)。


查看完整回答
反对 回复 2019-12-09
?
HUWWW

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();

}


查看完整回答
反对 回复 2019-12-09
  • 3 回答
  • 0 关注
  • 429 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信