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

C++ STL  速成

2014-08-11 21:28 387 查看
STL 之模板

可以将两个函数合并

定义函数模板:

程序一



STL 速成" TITLE="C++ STL 速成" />


程序二



STL 速成" TITLE="C++ STL 速成" />


STL概述:

容器:可容纳各种数据类型的数据结构

vector list deque set map stack queue

共有的成员函数 empty( ) size( ) begin( ) end( )

rbegin( ) 最后一个元素的迭代器。

rend( ) 第一个元素前面的位置的迭代器

erase( ) clear( )

迭代器:可访问容器中的元素的特殊指针

算法:用来操作容器中元素的函数模板

函数对象:是一个类似函数的对象,可像函数一样调用

STL之vector

说明:实际上就是动态数组,但比数组灵活 ,能够自动增加以容纳新的元素。

初始化:vector v;

Vector v2(n,i);

方法:访问 cout<<v[i];

迭代器访问;

插入:Push_back () 在尾部插入元素;

Insert 在任意地方插入 insert(iterator it,T t); insert(v.begin+10,10);

删除: pop_back(); 删除最后一个元素

Erase()删除指定区域或位置的一段区间的元素

Clear ()删除所有元素

向量大小:size()

resize()

排序 sort(v.begin( ),v.end( ));

程序:


STL 速成" TITLE="C++ STL 速成" />


STL之List

说明:是一个双向链表 双向访问链表中的结点

创建: list table

List table(10)

List table (10,1);

插入:push_back( )

Push_front( )

Insert( iterator it,T t)

删除:remove (T elem) 去重 pop_front( ) pop_back( ) erase( iterator it) clear( )

遍历: for(it=talbe.begin();it!=table.end();it++) //前向遍历

For(it=table.rbegin();it!=table.rend();it++) //后向遍历

小心:table.end()里是不存元素的

排序: table.sort( )

剔除连续重复的元素: unique

重组链表:splice

链表的逆置:reverse( )

合并:table1.merge(table2);

查找:it=find(table.begin(),table.end(),100);

例题:约瑟夫环



STL 速成" TITLE="C++ STL 速成" />


STL之Set

1, 介绍:

主要特性就是存放不相同元素的容器

一般用于查找大数据中的某一元素,或者是插入不相同的元素

将插入数据生成一棵平衡二叉树(AVL)。
查找一般用 set 容器。(尤其是大数据)比向量vector 快的多
红黑树 查找高效,统计性能好于平衡二叉树。
STL set容器使用的是红黑树。

2, 使用:

申明:sets; set s

自定义自己的比较规则

set 对象名

3, 方法:

(1) Insert (): 将元素插入到集合中。

Pair insert(const value_type &x); 返回值为pair型<</font>迭代器位置,是否成功>

Pair:

pair a(10,’A’); //表示a中有两个类型值

(2) Erase(): 删除元素

(3) 遍历:for(it=s.begin( );it!=s.end( );it++)

(4) Find() :查找

(5) Swap 交换两个集合中的元素。


STL 速成" TITLE="C++ STL 速成" />


STL之map

1, 介绍:映造容器中节点元素由key(键,排序)和value构成。效率 0(nlogn)

2, 使用: map,char>m
m.clear() //清空容器
m.find(xx)!=m.end(); //查找
3, 方法:(1) insert:与数组辅助类似 m[10]=”a”; m[key]=”value”
Typedef pair mypair;
m.insert(mypair(1,’a’));
或者:m.insert(pair(1,’a’));
(2) clear() erase() 删除
例题:
题目描述
Julius Caesar 生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。
假 设你是Caesar 军团中的一名军官,需要把Caesar 发送的消息破译出来、并提供给你的将军。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都 分别替换成字母F,V替换成A,W替换成B…),其他字符不 变,并且消息原文的所有字母都是大写的。
密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
输入
最多不超过100个数据集组成。每个数据集由3部分组成:
起始行:START
密码消息:由1到200个字符组成一行,表示Caesar发出的一条消息
结束行:END
在最后一个数据集之后,是另一行:ENDOFINPUT
输出
每个数据集对应一行,是Caesar 的原始消息。


STL 速成" TITLE="C++ STL 速成" />


STL之stack queue

不支持迭代器

STL之string
s + t
将串s和t连接成一个新串
s = t
用t更新s
s == t
判断s与t是否相等
s != t
判断s与t是否不等
s < t
判断s是否小于t(按字典顺序比较)
s <= t
判断s是否小于或等于t (按字典顺序比较)
s > t
判断s是否大于t (按字典顺序比较)
s >= t
判断s是否大于或等于t (按字典顺序比较)
s[i]
访问串中下标为i的字符
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: