c语言stl用法,C STL快速入门!学习使我快乐

C++ STL中最基本以及最常用的类或容器无非就是以下几个:

▶ string

▶ vector

▶ set

▶ list

▶ map

下面就依次介绍它们,并给出一些最常见的最实用的使用方法,做到快速入门。

☏ string

首先看看我们C语言一般怎么使用字符串的

179615008_1_20200105082934472

C++ 标准库中的string表示可变长的字符串,它在头文件string里面。#include

用string初始化字符串分两类:用“=”号就是拷贝初始化,否则就是直接初始化。

179615008_2_20200105082934581

179615008_3_20200105082934628

179615008_4_20200105082934753

179615008_5_20200105082934894

179615008_6_2020010508293581

对于想学习C/C++的小伙伴而言,学习的氛围和志同道合的伙伴很重要,笔者推荐一个C语言/C++编程爱好者的聚集地>>>私信我【编程学习】即可!۞ string的IO操作

使用cin读入字符串时,遇到空白就停止读取。比如程序输入的是'Hello World'

那么我们得到的字符串将是'Hello',前面的空白没了,后面的world也读不出来。

如果我们想把整个hello world读进来怎么办?那就这样做cin>>s1>>s2;

hello存在s1里,world存在s2里了。

有时我们想把一个句子存下来,又不想像上面那样创建多个string来存储单词,怎么办?

那就是用getline来获取一整行内容。stringstr;getline(cin, str);cout<< str <

当把string对象和字符面值及字符串面值混在一条语句中使用时,必须确保+的两侧的运算对象至少有一个是string

179615008_7_20200105082935128۞ 处理string中的字符

访问字符串的每个字符

179615008_8_20200105082935237

在C语言中我都是用下标或者指针来访问数组元素,而在C++里,有个新奇的东西叫做迭代器iterator,我们可以使用它来访问容器元素。

179615008_9_20200105082935269

179615008_10_20200105082935316

我们也可以是使用const_iterator使得访问元素时是能读不能写,这跟常量指针意思差不多。

179615008_11_20200105082935425

179615008_12_20200105082935566

string还有一些很好用的函数,比如找子串

179615008_13_20200105082935706☏ vector

C++ STL中的verctor好比是C语言中的数组,但是vector又具有数组没有的一些高级功能。与数组相比,vector就是一个可以不用再初始化就必须制定大小的边长数组,当然了,它还有许多高级功能。

要想用vector首先得包含头文件vector。#include

怎么初始化?

179615008_14_20200105082935737

如果vector的元素类型是int,默认初始化为0;如果vector元素类型为string,则默认初始化为空字符串。

179615008_15_20200105082935831

如何向vector添加元素?

请使用push_back加入元素,并且这个元素是被加在数组尾部的。

179615008_16_20200105082935878

vector其他的操作

179615008_17_20200105082935956

访问和操作vector中的每个元素

179615008_18_2020010508293666

注意:只能对已存在的元素进行赋值或者修改操作,如果是要加入新元素,务必使用push_back。push_back的作用有两个:告诉编译器为新元素开辟空间、将新元素存入新空间里。

比如下面的代码是错误的,但是编译器不会报错,就像是数组越界。

179615008_19_20200105082936144

当然我们也可以选择使用迭代器来访问元素

179615008_20_20200105082936237

上面是正向迭代,如果我们想从后往前迭代该如何操作?

使用反向迭代器

179615008_21_20200105082936362

vector最常用的增删操作

179615008_22_20200105082936456

179615008_23_20200105082936503

179615008_24_20200105082936628

注意:虽然vertor对象可以动态增长,但是也或有一点副作用:已知的一个限制就是不能再范围for循环中向vector对象添加元素。另外一个限制就是任何一种可能改变vector对象容量的操作,不如push_back,都会使该迭代器失效。

总而言之就是:但凡使用了迭代器的循环体,都不要向迭代器所属的容器添加元素!

۞ C++中push_back和insert两个有什么区别?

顾名思义push_back把元素插入容器末尾,insert把元素插入任何你指定的位置。

不过push_back速度一般比insert快。如果能用push_back尽量先用push_back。☏ set

set跟vector差不多,它跟vector的唯一区别就是,set里面的元素是有序的且唯一的,只要你往set里添加元素,它就会自动排序,而且,如果你添加的元素set里面本来就存在,那么这次添加操作就不执行。要想用set先加个头文件set。

179615008_25_20200105082936769

179615008_26_20200105082936972☏ list

list就是链表,在C语言中我们想使用链表都是自己去实现的,实现起来倒不难,但是如果有现成的高效的链表可以使用的话,我们就不需要重复造轮子了。STL就提供了list容器给我们。

list是一个双向链表,而单链表对应的容器则是foward_list。

list即双向链表的优点是插入和删除元素都比较快捷,缺点是不能随机访问元素。

初始化方式就大同小异了,跟vector基本一样。要想用list先加个头文件list。

179615008_27_202001050829373

179615008_28_2020010508293781

值得注意的是,list容器不能调用algorithm下的sort函数进行排序,因为sort函数要求容器必须可以随机存储,而list做不到。所以,list自己做了一个自己用的排序函数,用法如下:

179615008_29_20200105082937113☏ map

map运用了哈希表地址映射的思想,也就是key-value的思想,来实现的。

首先给出map最好用也最最常用的用法例子,就是用字符串作为key去查询操作对应的value。

要使用map得先加个头文件map。

179615008_30_20200105082937191

179615008_31_20200105082937394

如果想看看某个存不存在某个key,可以用count来判断

179615008_32_20200105082937535

用迭代器来访问元素

179615008_33_20200105082937628

“我是一名从事了10年开发在退休边缘垂死挣扎的高龄程序员,最近我花了一些时间整理了一个完整的学习C语言、C++的路线,项目源码和工具。对于想学习C/C++的小伙伴而言,学习的氛围和志同道合的伙伴很重要,笔者推荐一个C语言/C++编程爱好者的聚集地>>>私信我【编程学习】即可!

欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下一个优秀的程序员。工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以一起学习!”

关注我,带你遨游代码世界!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值