C++ STL常见用法

1. 基本用法

   template< class T >

   template< typename T>

 

声明:

template < typename T , typename T2 >
class Array{

      void show();

}

 

实现:

template<class T , class T2>       //要放在前面,不然...

void  Array<T, T2>::show(){ /* * * * */ }

 

 

模板类可以作为一种数据类型出现在参数列表中:

template< typename T, typename T2>

ostream & operator << ( ostream & os, const Array< T, T2> & ar){ /****/}

 

以上可以用在 cout 上重载 << 运算符.

 

 

模板类作为函数式参数:

template Array<class T, int S>

 

 

assert 的使用:

 

#include <cassert>

 

// assert( true );   <-- 当为 true 时正常...

// 关闭 assert       <-- 在 include <cassert > 之前加上 #define NDEBUG

// 注:最好把 assert 写在文件的最开始位置,因为,貌似 <iostream>中已经包含了此宏的定义.

 

 

 

2.STL  容器,算法, 迭代器

容器:vector,stack,queue,deque,list,set,map

         (向量,关联数组,集合,堆栈,序列)

算法:copy,sort,search,merge,permute

        sort 对 vector,deque,set起作用 ...... 默认使用 升序

迭代器:

        如 list<int>::iterator it;

            vector<int>::const_iterator c_it;

            // it++ ; it != x.end();

 

 

 

容器分类:

       关联式:

              list 双向链表, vector 数组, deque 两端进行插入删除的队列

       关联式:

             set, multiset, map, multimap

 

 

 vector:  ----->在队尾插入效率高,在头部插入耗费时间与 size() 成正比.

       v.insert(v.begin(),110);

       v.erase(v.begin());

       v.size();

       v.reverse();

       v.push_back();

 

 deque: -----> 两端操作的效率一样.  double-ended queue;

 list  :   -----> 链表

            

 

 

 

 

set : 可用insert插入,用 find 查找 

       s.insert(s.begin(), 100) 或 s.insert(100)   // 指定位置或不指定位置均可

       s.find(100) != s.end() ? 找到了 : 没找到;

map: 可用下标操作

     

 

容器适配器:利用基本容器实现特定功能,包括三种: stack,queue,priority_queue;

stack : top(),pop(),push(),size(),empty()      //无push_back();

queue: front(),pop(),push(),back(),              //无push_back();

priority_queue: top(),push(),pop(),

 

 

其它容器:

string: for_each( s.rbegin(), s.rend(), print );

          char * where = find( s.begin(), s.end(), 'a' );

          sort( s.begin(), s.end() );

 bitset: 实际上是位串  <bitset>

          bitset< 8 > bs(9u);

 

 

3. STL算法

    reverse( v.begin(), v.end() )

    generate( v.begin(), v.end(), rand );

    replace_if( v.begin(), v.end(), isOdd, 0);

    sort( v.begin(), v.end(), cmp );

    for_each( v.begin(), v.end(), dump)

    copy( a, a + len, ostream_iterator< char > ( cout, " " ); 

    //  要有 #include <iterator>

 

4. 其它STL构件

     函数对象: 重载 () 运算符的类

     函数适配器: 以现有函数对象来创建新函数对象....用于特化和扩展一元和二元函数对象。

                   绑定器:它通过将一个操作数绑定到给定值而将二元函数对象转换为一元函数对象。

 

                   求反器:  它将谓词函数对象的真值求反。
         bind2nd将给定值绑定到二元函数对象的第二个实参。例如,为了计算一个容器中所有小于或等于10的元素的个数,可以这样给count_if传递值:
         如:count_if (vec.begin(), vec.end(), bind2nd(less_equal<int>(), 10));
          
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值