c++|STL简介+string类的使用(常用接口)

目录

一、STL简介

1.1STL的版本

 1.2STL六大组件

1.3STL的重要性及缺陷 

二、string类简介

2.1string类了解

2.2为什么学习string类

三、string类使用(常用接口)

3.1string类的成员函数

3.1.1构造函数

3.1.2析构函数

3.1.3“=”运算符重载函数 

3.2迭代器(iterator)+string类对象的访问及遍历

3.2.1 iterator

3.2.2 operator[]

3.2.3 at()

3.2.4 back() && front()

3.2.5 范围for

3.3string类对象的容量操作

3.3.1 size() && length()

3.3.2 capacity() && reserve && resize

3.3.3  empty() && clear()

3.4string类对象的修改操作

3.4.1 push_back  && append && assign && insert

3.4.2 operator+=

3.4.3 c_str()

3.4.4 find+ npos && substr()

3.4.5 erase


一、STL简介

STL(standard template libaray-标准模板库):从表面意思来说,他是c++标准库的重要组成成分,他的组件(接口)是可复用的,管理着数据结构和算法。

1.1STL的版本

  • 原始版本--HP版本(所有STL实现版本的始祖),开源版本,允许任何人使用,但后人如对其修改,也需开源。
  • P.J.版本--继承自HP版本,在 HP 版本的基础上进行了大量的独立创作和投入,形成了新的商业价值,那么他可以根据自己的意愿选择是否收费,并制定自己的授权协议。被Windows Visual C++采用,不能公开或修改,那么必然有一定的缺陷不容易发现,可读性较低。
  • RW版本--继承HP版本,被C++ Builder采用,同样不能修改,可读性较低
  • SGI版本--继承HP版本,被GCC(Linux)采用,开源版本,可移植性好,阅读性非常高。在学习过程中,就可以参照这个版本的源码进行研究。

 1.2STL六大组件

STL有六大组件,通过一张图来展示,要学的第一个组件就是容器,这些容器接口说白了就是管理数据结构,最重要的基础就是string接口,string产生其实比STL还要早,后来才归类进来,学会这一个,就可以贯通各个接口,因为用法都大差不差。

 

1.3STL的重要性及缺陷 

STL在笔试中、面试中占了很重要的一部分,在工作中也会经常使用,在学习STL的过程中,也不能急于求成,先学会怎么用,再去深入了解底层,再扩展。当然在学习过程中也可能遇到以下问题,当然这应该也是STL的缺陷。

1.STL更新慢。

2.STL现在没有只差线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的

3.STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取

4.STL的使用会有代码膨胀的问题,当然这是模板语法本身导致的。

接下来我们进行学习第一个容器接口string类,并结合所学理解STL的缺陷。

二、string类简介

2.1string类了解

1.string类其实就是一个模板类,typedef过来的,是basic_string模板类的一个实例,用的char来实例化basic_string模板类。

2.管理字符序列的一个类

3.string类有许多接口,这些接口都是用来操作操作字符串

4.这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。

2.2为什么学习string类

其实还是一个原则,string类可以更好的面向对象,string类的接口都是拿来使用就行,不需要过分管理底层如何实现,而C语言就不同了,轮子需要自己造,空间需要自己管理 ,不能出错。

 那么接下来,就进行学习string类的常用接口有哪些,以及如何使用。

三、string类使用(常用接口)

在介绍string类接口前先说明一下接口会出现的npos,他是成员常量,在接口中扮演缺省值成分,size_t为unsigned int,无符号整形的-1,即整形最大值。也就是不传参,默认就是缺省值。其次在使用string类的接口时包含一下头文件#include <string>

static const size_t npos = -1;

3.1string类的成员函数

3.1.1构造函数

default (1)
                             string();
                        默认构造函数,构造空的string类对象,即空字符串
copy (2)
                     string (const string& str);
                                                   拷贝构造函数
substring (3)
    string (const string& str, size_t pos, size_t len = npos);
                   从字符串的 pos 位置取len个字符串来构造string类对象
from c-string (4)
                        string (const char* s);
                                        用c-string来构造string类对象
from sequence (5)
                 string (const char* s, size_t n);
                              从字符串中拷贝前n个字符构造string类对象
fill (6)
                     string (size_t n, char c);
                                        string类对象中包含n个字符c

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string str;//构造空对象,调用默认构造函数
	string s("hello world");//用c-string来构造string类对象
	string s1(5, 'x');//创建5个字符x
	string s2(s1);//s1拷贝给s2
	string s3(s, 5, 3);//从第五个位置,拷贝3个字符给s3
	string s4(s, 2);//从第2个位置,npos为整形最大值,默认拷贝后面所有字符给s4,包括'/0'

	string s5("hello world", 5);//拷贝前5个字符给s5

	cout << s << endl;
	cout << s1 << endl;
	cout << s2 << endl;
	cout << s3 << endl;
	cout << s4 << endl;
	cout << s5 << endl;
	return 0;
}

 运行结果:

3.1.2析构函数

~string():这个基本上不用,编译器会自动调用析构函数,释放对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值