7.C/C++常用标准库及String类实现指南

一、前言

在正常的开发过程中,使用标准库是一件非常常见的事情,如果不会使用标准库,程序开发效率将大幅下降。

为了后面做一些有趣的小项目,所以本节将讲一些C/C++中常用的标准库。

但这也只是为了给大家留下一个印象,更多的还是需要大家自己学习。

最主要的原因是,如果不经常用,即使现在会用了,过段时间也会忘了,所以如果后面的项目中遇到我觉得大家可能不怎么熟悉的地方,也会稍微讲一讲。

二、String

C/C++的标准库众多,所以我们就先挑一个稍微简单一点且非常常用的标准库:string

不过由于C/C++标准库里面的源码到处使用宏、自定义结构体和模板,十分晦涩难懂,我们这里只是简单实现一下它的基础功能即可。

老规矩,不知不觉已经来到第七章了,那就新建一个项目day7,将其设为启动项目、并添加源文件main.cpp

image-20231202105137599

看名字string就知道,这是一个字符串,其本质就是封装了对char*的操作。

那么让我们先来使用一下它,看它有多方便吧,添加头文件string

#include<iostream>
#include<string>
using std::string;
using std::cout;
using std::endl;
int main() {
	string s1="https://www.kucoding.com";
	s1 += " 学习C/C++";
	cout << s1 << endl;
}

同样的,string也是在标准命名空间std中,避免写着麻烦,我们就使用了using std::string

这里用到了一个写法 +=,这其实也是一个运算符,等效于 s1=s1+" 学习C/C++"; ,其实intdouble等基本数据类型都可以这样写。

上面的几句话,如果换为char* ,使用C语言提供的字符串操作函数,就是下面这种写法:

#include<iostream>
using std::cout;
using std::endl;
int main() {
	char buf[100]="https://www.kucoding.com";
	strcat_s(buf,100," 学习C/C++");
	cout << buf<<endl;
}

strcat_s为函数strcat的安全函数,用于拼接字符串。

这么一看,好像string标准库也没什么优势,但如果继续下去,你就会发现string的优越性。

比如:

  • 我这里给缓存区buf给了100个空间,这是我估计出来的,但string不用我来估计。
  • 只要电脑内存够大,string几乎可以无限自动追加,且这一过程是自动的,虽然我们用char* ,通过new动态分配内存的方法也可以实现,但全程需要我们手动操作。
  • string 只需要像符合我们常规思路的使用即可比如用+=追加字符串,但使用char*,我们得自己记大量的字符串操作函数。

所以接下来,我们就试着实现一个自己的string类,来实现一个常规的字符串类的基本功能。

首先,创建一个类String,它需要有三个成员变量:

  • buf:存放数据的缓存区

  • size:当前字符串的长度(不含末尾0结束字符)

其目的是方便成员函数使用,比如增、删、改、查等操作都需要字符串的长度才能进行,与其每次都调用一下strlen函数来计算,不如直接记录下来。

  • capacity:缓存区容量,即缓存区的大小,方便时刻关注当前操作是否有可能超出缓存区的大小。

完成之后如下:

class String {
private:
	char* buf; //存放数据的缓存区
	int size; //当前使用了多少缓存区
	int capacity; //缓存区的容量
public:
};

有了成员变量,我们就可以开始写它的构造函数了:

	String() {
		buf = new char[15];
		capacity = 15;
		size = 0;
	}

	String(const char* str) {
		size=strlen(str);
作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux