string类和标准模板库

string类

string类的构造函数

构造函数描述
string(const char*s)将string对象初始化为s指向的NBTS
string(size_type n,char c)创建一个包含n个元素的string对象,其中每个元素都被初始化为字符c
string(const string & str)将一个string对象初始化为string对象str(复制构造函数)
string()创建一个默认的string对象,长度为0(默认构造函数)
string(const char*s,size_type n)将string对象初始化为s指向的NBTS的前n个字符,即使超过额NBTS结尾
template<class Iter> string(Iter begin,Iter end)将string对象初始化为区间[begin,end)内的字符
string(const string & str,string size_type pos=0,size_type n = npos)将一个string对象初始化为对象str中从位置pos开始到结尾的字符,或从位置pos开始的n个字符
string(string && str) noexcept将一个string对象初始化为string对象str,并可能修改str
string(initializer_list il将一个string对象初始化为初始化列表il的字符

string类输入

对于C*风格字符串,有三种方式:

char info[100];
cin>>info //read a word
cin.getline(info,100);//read a line, discard \n
cin.get(info,100);//read a line, leave \n in queue

对于string对象,有两种方式:

string stuff;
cin>>stuff;//read a word
getline(cin,stuff);//read a line, discard \n

两个版本的getline()都有一个可选参数,用于指定使用哪个字符来确定输入的边界:

cin.getline(info,100,':');//read up to :,discard :
getline(stuff,':');//read up to :,discard :

功能上,string版本的getline()将自动调整目标string对象的大小,使之能够存储输入的字符。

string版本的getline()的三种情况:

  1. 到达文件尾,输入流的eofbit将被设置,意味着fail()和eof()都将返回true;
  2. 遇到分界字符(默认为\n),在这种情况下,把分界字符从输入流中删除,但不存储它;
  3. 读取的字符数达到最大允许值,将设置输入流的failbit,意味着fail()返回true。

输入流对象有个统计系统,检测到文件尾后设置eofbit寄存器,检测到输入错误时将设置failbit寄存器,出现无法识别的故障时将设置badbit寄存器。
string版本的operator>>()不断读取,直到遇到空白字符并将其留在输入队列中。空白字符是指空格、换行符和制表符。

重载的find()方法

方法原型描述
size_type find(const string & str, size_type pos=0) const从字符串的pos位置开始查找子字符串str。如果找到,则返回该子字符串首次出现其首字符的索引;否则,返回string::npos
size_type find(const char*s,size_type pos=0)const从字符串的pos位置开始,查找子字符串s。如果找到,则返回该子字符串首次出现时其首字符的索引;否则,返回string::npos
size_type find(const char*s,size_type pos = 0,size_type n)从pos开始,查找s的前n个字符组成的子字符串…
size_type find(char ch, size_type pos=0)const从字符串的pos位置开始,查找字符ch。如果找到,返回该字符首次出现的位置;否则返回string::npos

注意:open()要求使用一个C-风格字符串作为参数,c_str()方法返回一个指向C-风格字符串的指针。

智能指针模板类

创建智能指针对象,必须包含头文件memory。
auto_ptr、unique_ptr、shared_ptr在过期时,自动释放内存。
auto_ptr<double> pd(new double);

如果程序要使用多个指向同一个对象的指针,应选择shared_ptr;如果程序不需要多个指向同一个对象的指针,则可以使用unique_ptr。

标准模板库

模板类vector

迭代器:是一个广义指针。
为vector的double类型规范声明一个迭代器:
vector<double> :: iterator pd;
假设scores是一个vector<double>对象:vector<double> scores;
可以使用迭代器pd执行如下操作:

pd=scores.begin();
*pd=22.3;
++pd;

C++可以进行自动推断:auto pd = scores.begin();

泛型编程

模板使得算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型。
序列:7种STL容器类型(deque、forward_list、list、queue、priority_queue、stack和vector)都是序列。

vector

提供自动内存管理功能、可以动态改变vector对象的长度。提供对元素的随机访问。在尾部添加和删除元素的时间是固定的,但是在头部或中间插入和删除元素的复杂度为线性时间。可反转

deque

表示双端队列,在开始位置插入和删除元素的时间是固定的。

list

表示双向链表,除了首尾元素,每个元素都与前后的元素相链接,这意味可以双向遍历链表。list在链表中任意位置进行插入和删除的时间是固定的。强调元素的快速插入和删除。可反转。

forward_list

单链表,每个节点只链接到下一个节点。不可反转。

queue

是一个适配器类,不允许随机访问队列元素,甚至不允许遍历队列。只能对队首尾操作、检测元素数目和队列是否为空

priority_queue

另一种适配器。最大元素被移到队首,默认底层类是vector。

stack

是个适配器,为底层类(默认是vector)提供了典型的栈接口。

关联容器

基于树结构。

将值与键关联在一起,并使用键查找值。set的值类型和键相同,键是唯一的,对set来说,值就是键。multiset类似于set,只是可能有多个值的键相同。在map中,值和键的类型不同,键是唯一的,每个键只对应一个值。multimap与map相似,只是一个键可以与多个值相关联。

无序关联容器

基于数据结构哈希表。

函数对象

函数对象(函数名)也叫函数符。

函数符概念

  • 生成器是不用参数就可以调用的函数符;
  • 一元函数是用一个参数可以调用的函数符;
  • 二元函数是用两个参数可以调用的函数符;
  • 返回boo值的一元函数是谓词;
  • 返回bool值的二元函数是二元谓词;

binder1st(f2,val) f1; 将val赋给f2的第一个参数。f1(x) 等价于f2(val,x)。
binder2nd 将常数赋给第二个参数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值