STL用法整理

博主曾果粒的理解:在C++标准中,STL被组织为下面的13个头文件:、、、、、、、<forward_list>、、<unordered_map>、、、、、<unordered_set>、和。

向量(vector) 连续存储的元素

列表(list) 由节点组成的双向链表,每个结点包含着一个元素

双队列(deque) 连续存储的指向不同元素的指针所组成的数组

集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序

多重集合(multiset) 允许存在两个次序相等的元素的集合

栈(stack) 后进先出的值的排列

队列(queue) 先进先出的执的排列

优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列

映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列

多重映射(multimap) 允许键对有相等的次序的映射

来自博主曾果粒的资料收集

一、string

在定义 string 类对象时,string 类自身可以管理内存,博主曾果粒在工作中没有关注内存的分配细节。

string 类提供的各种操作函数大致分为八类:构造器和析构器、大小和容量、元素存取、字 符串比较、字符串修改、字符串接合、I/O 操作以及搜索和查找。

要使用 string 类,必须包含头文件

string stuff; 
getline(cin, stuff);  //获取一行字符串

1、构造函数

string strs                      //生成空字符串
string s(str)                    //生成字符串str的复制品
string s(str, stridx)            //将字符串str中始于stridx的部分作为构造函数的初值
string s(str, strbegin, strlen)  //将字符串str中始于strbegin、长度为strlen的部分作为字符串初值
string s(cstr)                   //以C_string类型cstr作为字符串s的初值
string s(cstr,char_len)          //以C_string类型cstr的前char_len个字符串作为字符串s的初值
string s(num, c)                 //生成一个字符串,包含num个c字符
string s(strs, beg, end)         //以区间[beg, end]内的字符作为字符串s的初值

2、获取字符串长度

str.size();          //返回 string 类型对象中的字符个数
str.length();        //返回 string 类型对象中的字符个数
str.max_size();      //返回 string 类型对象最多包含的字符数。一旦程序使用长度超过 max_size() 的 string 操作,编译器会拋出 length_error 异常。
str.capacity();      //返回在重新分配内存之前string 类型对象所能包含的最大字符数。

3、获取字符串元素

一般可使用两种方法访问字符串中的单一字符:下标操作符[] 和 成员函数at()。两者均返回指定的下标位置的字符。第 1 个字符索引(下标)为 0,最后的字符索引为 length()-1。

需要注意的是,这两种访问方法是有区别的:

下标操作符 [] 在使用时不检查索引的有效性,如果下标超出字符的长度范围,会示导致未定义行为。对于常量字符串,使用下标操作符时,字符串的最后字符(即 ‘\0’)是有效的。对应 string 类型对象(常量型)最后一个字符的下标是有效的,调用返回字符 ‘\0’。
函数 at() 在使用时会检查下标是否有效。如果给定的下标超出字符的长度范围,系统会抛出 out_of_range 异常。

string s="abcd";
temp = str [2];       //获取字符 'c'
temp_1 = str.at(2);   //获取字符 'c'

4、字符串比较大小

Basic_string 类模板既提供了 >、<、==、>=、<=、!= 等比较运算符,还提供了 compare() 函数,其中 compare() 函数支持多参数处理,支持用索引值和长度定位子串进行比较。该函数返回一个整数来表示比较结果。如果相比较的两个子串相同,compare() 函数返回 0,否则返回非零值。

string A ("aBcdef");
string B ("AbcdEf");
string C ("123456");
string D ("123dfg");
//下面是各种比较方法
int m=A.compare (B);          //完整的A和B的比较              32
int n=A.compare(1,5,B,1,5);   //A的"Bcdef"和B的"bcdEf"比较   -32
int q=C.compare(0,3,D,0,3);   //"123"和"123"比较              0

5、字符串内容的修改

可以通过使用多个函数修改字符串的值。例如 assign(),operator=,erase(),交换(swap),插入(insert)等。另外,还可通过 append() 函数添加字符。

str.assign(str1);                      //str1赋值给str
str.assign (str1 , 3, 3);              //将从str1[3]长度3的子串赋值给str
str.assign (str1, 2, str1.npos);       //将从str1[2]到末尾赋值给str
str.assign (5, 'X');                   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值