亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

您使用哪些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 關注
  • 458 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號