织梦CMS - 轻松建站从此开始!

罗索

string和STL用法小结

罗索客 发布于 2009-11-30 17:29 点击:次 
在topcoder上做题时遇到了无数的编译错误和段错误,于是决定好好看一下string和STL。。。。
TAG:

记录下一些常见的用法,基本上都能在书上找到的

string

#include <string>
using namespace std;

构造:
string()//空串
string(another_string)//拷贝构造
string(char *s)//用字符数组构造

常用函数
.append(int n,char c)                  //追加n个c字符
.assign(string another_string) //赋值函数,把another_string赋值给oneString
.assign(int n,char c)                    //把n个c字符赋值给oneString
.size() 或者 .length()                    //返回长度
.swap(string another_string)     //交换内容

操作符
对于string s,t;
s+t 构成新串
s=t 用t更新s
s+=t 把t接在s后面
s==t 判断是否相等
s!=t 判断是否不等
s<t
s<=t
s>t
s>=t (略)
s[i] 访问下标为i的元素,用法跟数组类似

STL

#include <vector>
using namespace std;

初始化

vector <type> v      v是空的,类型为type的矢量
vector <type> v(const int n) v是大小为n的矢量
vector <type> v(const int n,type value) v的大小是n,每个元素初始的时候是value
vector <type> v1(v2) v1中的内容和v2中的一样

常用函数
.push_back(value v) 追加一个v元素
.pop_back() 删除最后一个元素
.size() 返回元素个数
.clear() 清空

排序:sort(v.begin(),v.end(),cmp)

要注意的地方在于,如果只单是定义了一个vector <type> v;的矢量,如果没有使用像push_back()这样的函数来给它分配内存的话,是不能直接用下标形式去访问它的元素的,我就是这样re了无数次

先写到这里,以后有的新的东西再补充,有不足的地方请指正。

以下内容转载自百度百科

一、STL简介
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。
STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类 和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文 件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack> 和<utility>。以下笔者就简单介绍一下STL各个部分的主要特点。
二、算法
大家都能取得的一个共识是函数库对数据类型的选择对其可重用性起着至关重要的作用。举例来说,一个求方根的函数,在使用浮点数作为其参数类型的情况下的可 重用性肯定比使用整型作为它的参数类性要高。而C++通过模板的机制允许推迟对某些类型的选择,直到真正想使用模板或者说对模板进行特化的时候,STL就 利用了这一点提供了相当多的有用算法。它是在一个有效的框架中完成这些算法的——你可以将所有的类型划分为少数的几类,然后就可以在模版的参数中使用一种 类型替换掉同一种类中的其他类型。
STL提供了大约100个实现算法的模版函数,比如算法for_each将为指定序列中的每一个元素调用指定的函数,stable_sort以你所指定的 规则对序列进行稳定性排序等等。这样一来,只要我们熟悉了STL之后,许多代码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所需要的功能 并大大地提升效率。
算法部分主要由头文件<algorithm>,<numeric>和<functional>组 成。<algorithm>是所有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上 都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。<numeric>体积很 小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。<functional>中则定义了一些模板类, 用以声明函数对象。
三、容器
在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要。
经典的数据结构数量有限,但是我们常常重复着一些为了实现向量、链表等结构而编写的代码,这些代码都十分相似,只是为了适应不同数据的变化而在细节上有所 出入。STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL容器对最常用的数 据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。
容器部分主要由头文 件<vector>,<list>,<deque>,<set>,<map>,<stack> 和<queue>组成。对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下表总结一下它们和相应头文件的对应关 系。
数据结构           描述                                     实现头文件
向量(vector)   连续存储的元素                                   <vector>
列表(list) 由节点组成的双向链表,每个结点包含着一个元素     <list>
双队列(deque) 连续存储的指向不同元素的指针所组成的数组       <deque>
集合(set)     由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序           <set>
多重集合(multiset) 允许存在两个次序相等的元素的集合          <set>
栈(stack)     后进先出的值的排列                            <stack>
队列(queue) 先进先出的执的排列                            <queue>
优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列                                                           <queue>
映射(map)     由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map>
多重映射(multimap) 允许键对有相等的次序的映射                <map>
四、迭代器
下面要说的迭代器从作用上来说是最基本的部分,可是理解起来比前两者都要费力一些(至少笔者是这样)。软件设计有一个基本原则,所有的问题都可以通过引进 一个间接层来简化,这种简化在STL中就是用迭代器来完成的。概括来说,迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提 供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
迭代器部分主要由头文件<utility>,<iterator>和<memory>组 成。<utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,<iterator>中提供了迭代器 使用的许多方法,而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生 的临时对象提供机制,<memory>中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。

(罗索客)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/200911/8044.html]
本文出处:未知 作者:罗索客
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容