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

今天早上问的这个问题使我想知道您认为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();

}

我还有更多,但是我对您使用的是哪个感兴趣?请限制对包装函数的回答-即最多两行代码。


湖上湖
浏览 430回答 3
3回答

鸿蒙传说

包含(容器,val)(非常简单,但很方便)。template<typename C, typename T>bool contains(const C& container, const T& val) {&nbsp; &nbsp;return std::find(std::begin(container), std::end(container), val) != std::end(container);}remove_unstable(开始,结束,值)一种更快的std :: remove版本,但它不保留其余对象的顺序。template <typename T>&nbsp;T remove_unstable(T start, T stop, const typename T::value_type& val){&nbsp;&nbsp;&nbsp; &nbsp; while(start != stop) {&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if (*start == val) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --stop;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ::std::iter_swap(start, stop);&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ++start;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp; &nbsp; return stop;&nbsp;}(在pod类型(int,float等)的向量的情况下,几乎所有对象都被删除了,std :: remove可能会更快)。

HUWWW

通常,我会以向量的形式使用矢量,而没有特定的顺序(很明显,当我不需要快速的“设置此元素”检查时)。在这些情况下,调用delete()会浪费时间,因为它将对元素进行重新排序,而我不在乎顺序。这就是下面的O(1)函数派上用场的时候-只需将最后一个元素移到要删除的元素的位置即可:template<typename T>void erase_unordered(std::vector<T>& v, size_t index){&nbsp; &nbsp; v[index] = v.back();&nbsp; &nbsp; v.pop_back();}
打开App,查看更多内容
随时随地看视频慕课网APP