C++ STL  速成

STL 之模板

可以将两个函数合并

定义函数模板:

程序一

C++ <wbr>STL <wbr> <wbr>速成

程序二

 

 C++ <wbr>STL <wbr> <wbr>速成

STL概述:

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

         vector  list  deque  set  map  stack  queue   

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

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

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

   erase(   clear( )

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

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

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

STLvector

     

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

初始化: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( ));

程序:

C++ <wbr>STL <wbr> <wbr>速成



 

STLList

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

创建: 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);

 

例题:约瑟夫环

     C++ <wbr>STL <wbr> <wbr>速成

STLSet

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 交换两个集合中的元素。

C++ <wbr>STL <wbr> <wbr>速成

 

STLmap

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

2, 使用: mapchar>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都 分别替换成字母FV替换成A,W替换成B…),其他字符不 变,并且消息原文的所有字母都是大写的。

密码字母:

原文字母:U

输入

最多不超过100个数据集组成。每个数据集由3部分组成:

起始行:START

密码消息:由1200个字符组成一行,表示Caesar发出的一条消息

结束行:END

在最后一个数据集之后,是另一行:ENDOFINPUT

输出

每个数据集对应一行,是Caesar 的原始消息。 

 C++ <wbr>STL <wbr> <wbr>速成

STLstack queue 

不支持迭代器

STLstring 

t 将串st连接成一个新串

t t更新s

== t 判断st是否相等

!= t 判断st是否不等

t     判断s是否小于t(按字典顺序比较)

<= t 判断s是否小于或等于(按字典顺序比较)

t    判断s是否大于(按字典顺序比较)

>= t 判断s是否大于或等于(按字典顺序比较)

s[i] 访问串中下标为i的字符


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值