您的位置:首页 > 编程语言 > C语言/C++

C++ STL常见用法

2010-05-29 23:02 232 查看
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));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: