in_han 的专栏

总结,学习,再总结,再学习....

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));
          
阅读更多
个人分类: C++编程
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭