learn C++ NO.9——STL简介、string(1)

这篇具有很好参考价值的文章主要介绍了learn C++ NO.9——STL简介、string(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STL简介

什么是STL?

STL指的是C++标准模板库(Standard Template Library),是一个C++中的通用库,包括许多常用的数据结构和算法,如vector、list、set、map、sort、find等。STL库的主要目标是提供一组高效、可靠、通用的模板类和函数,方便开发者使用,提高开发效率和代码质量。STL是C++标准库的重要组成部分,也是C++编程中不可或缺的一部分。

发展历史以及版本

STL(Standard Template Library)是由Alexander Stepanov和Meng Lee于1994年首次提出的。Alexander Stepanov是惠普公司(HP)的研究员,他在1983年到1994年期间在惠普公司工作,期间他开始了STL的研究和开发工作。Meng Lee是斯坦福大学的一位教授,他是Alexander Stepanov的学生,参与了STL的开发工作。

1994年,STL第一次公开发表,被纳入到C++标准库中。1998年,C++标准库正式发布,STL被正式纳入其中。2000年,STLport项目开始,旨在将STL移植到不同的编译器和操作系统中,并保持其兼容性。

随着C++标准的不断发展,STL的发展也在不断地推进。在C++11中,STL引入了新的特性和数据结构,如unordered_set、unordered_map、array等。在C++17中,STL也引入了更多的更新和改进,如parallel algorithms等。

总之,STL的发展历程是与C++标准库的发展密不可分的。随着C++的不断发展,STL也在不断地完善和发展。

STL分为许多版本,这里主要介绍常见的版本:原始版(HP版本),它是所有STL的鼻祖,对程序开发做出了不可磨灭的贡献。P.J版本,大家用的VS上采用的就是这个版本。SGI版本由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版 本。被GCC(Linux)采用,可移植性好, 可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。

STL六大组件

STL六大组件分别是容器、算法、迭代器、仿函数、空间配置器和配接器。在后面的学习中会一一具体介绍。这里简单了解即可。

learn C++ NO.9——STL简介、string(1)

初识string类

在线文档的简介

在正式介绍string类之前,推荐两个在线的c++文档查询网站,对于我们c++的学习非常有帮助。 官网和非官方。这里推荐使用非官方的在线文档,因为比较简洁方便查找。当然官方的文档非常详细,两者各有优势,可以按照喜好自行选择。
learn C++ NO.9——STL简介、string(1)

string类的简介

string是C++标准库中的一个类,用于处理字符串。string类的本质就是管理字符串的顺序表。
learn C++ NO.9——STL简介、string(1)
下面就正式开始介绍string类。

默认成员函数

learn C++ NO.9——STL简介、string(1)

string类的构造函数

learn C++ NO.9——STL简介、string(1)
string类一共提供了7种构造函数,分别是(1)无参构造。(2)拷贝构造。(3)拷贝子串构造,即从源string类的pos位置拷贝len个字符进行构造、(4)用c字符串构造,c字符串指的是c语言下以’\0’作为结束标识符的字符数组。(5)取c字符串中的n个字符进行构造。(6) 以n个字符来进行构造。(7)迭代器范围进行初始化,这里不重点讲,后面会介绍迭代器。
下面简单介绍一下(3)

//substring (3)	
string (const string& str, size_t pos, size_t len = npos);

这里的缺省参数npos其实是一个静态成员变量,表示的是4294967295。即0xffffffff。
learn C++ NO.9——STL简介、string(1)
其实就是将源string类的pos下标处的字符开始,拷贝len个字符进行构造

#include<iostream>
#include<string>

using namespace std;

int main()
{
	string str1("hello world");
	string str2(str1, 6, 5);
	string str3(str1,6);
	
	cout << str2 << endl;
	cout << str3 << endl;

	return 0;
}

learn C++ NO.9——STL简介、string(1)

string的析构函数和赋值等号重载

析构函数和赋值等号重载就简单看看就行。析构函数就是清理string类实例化对象的资源。赋值等号重载,就是给string类实例化的对象赋值,使当前值被替换。
learn C++ NO.9——STL简介、string(1)

#include<iostream>
#include<string>

using namespace std;

int main()
{
	string str1;
	str1 = "abcde";
	cout << str1 << endl;

	str1 = 'c';
	cout << str1 << endl;

	return 0;
}

learn C++ NO.9——STL简介、string(1)

流插入操作符重载和流提取操作符重载

learn C++ NO.9——STL简介、string(1)

int main()
{
	string str1;
	cin >> str1;
	cout << str1 << endl;

	return 0;
}

learn C++ NO.9——STL简介、string(1)

push_back接口和append接口

这里个接口都是用来给string类实例化出的对象进行尾插字符或字符串的。push_back是在string类对象后尾插一个字符。append是在当前string类对象后追加字符、字符串、string类对象等等。
learn C++ NO.9——STL简介、string(1)
learn C++ NO.9——STL简介、string(1)
这里的接口其实和上面介绍的构造函数的重载的参数方面就可以大概猜测到append对应的不同参数的功能,这里我就不重复介绍,浅浅谈一下第(2)个接口,它是追加一个string类对象中的一部分,也就是子串。但是他的第三个参数并没有给默认参数,这一点其实就跟上面的构造有些许设计上的不同,这也是string类比较为人诟病的一点,就是参数的设计没有很好的延续性。

int main()
{
	string s1("hello");
	cout << s1 << endl;

	s1.push_back(' ');
	s1.append("world");

	cout << s1 << endl;
	return 0;
}

加操作符重载和加等操作符重载

加操作符重载和加等操作符重载都是在string类对象的尾部插入字符或字符串。+操作符比较少用主要还是用的+=操作符。加等运算符重载是一个公共成员函数,加运算符重载为了支持给字符、字符串追加string类对象的操作,所以是非成员函数。
learn C++ NO.9——STL简介、string(1)

learn C++ NO.9——STL简介、string(1)

#include<iostream>
#include<string>

using namespace std;

int main()
{
	string s1("hello world");	
	cout << s1 << endl;

	string s2 = s1 + "你好";
	cout << s2 << endl;

	s2 = s2 + 'C';
	cout << s2 << endl;

	s2 = s2 + s2;
	cout << s2 << endl;


	return 0;
}

learn C++ NO.9——STL简介、string(1)
其实+=运算符重载的底层实现其实就是复用上面的两个接口,当调用+=后面跟的是string类对象或字符串时,编译器就会调用append。当调用+=后面跟的是字符时,编译器就会调用push_back。从使用的角度出发,用+=运算符还是比较舒服的。

int main()
{
	string s1("hello world");
	cout << s1 << endl;

	s1 += "你好";
	cout << s1 << endl;

	s1 += 'C';
	cout << s1 << endl;

	string s2("xxxxxxxxx");
	s1 += s2;
	cout << s1 << endl;

	return 0;
}

为什么string类不像我们之前学习的c字符串,需要我们自己确定大小,以避免溢出。是因为string的底层实现类似于顺序表的机制,空间不够了可以自动扩容。文章来源地址https://www.toymoban.com/news/detail-493357.html

到了这里,关于learn C++ NO.9——STL简介、string(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • learn C++ NO.10——string(3)

    现在是北京时间2023年6月22日的早上8点。又是一年端午,时光如梭。这一年来发生的变化太多了,遥想去年此时,我还沉浸在被大学录取的喜悦中,转眼间大一就过去了。这里我也衷心的祝愿您和您的家人端午安康! 上回介绍了下标访问操作符的运算符重载,这里我就不再介

    2024年02月11日
    浏览(34)
  • learn C++ NO.9——string(2)

    现在是北京时间的2023年6月15日早上的10点14分。时间过得飞快,现在已经大一的最后一个星期了。明天也是大一最后一次课,线下的实训课。线下实训内容为c语言二级的内容,对我来说跟学校的课效率太低下了,我还是比较喜欢按自己的节奏来,一般我是直接带笔记本过去按

    2024年02月09日
    浏览(36)
  • 【c++】:模拟实现STL模板中的string

        文章目录 前言 一.string的模拟实现 总结   上一篇文章我们详细介绍了STL中的string的一些常用的接口,这一篇文章我们将从底层实现string类,当然我们只是实现一些重要的,经常使用的接口,并且不是完全按照STL中的string去走的。   首先我们为了防止我们写的string类与库

    2024年01月20日
    浏览(56)
  • C++ STL 标准模板库介绍与入门

    目录 1、概述 1.1、C++ 标准库 1.2、Boost库 2、STL 版本 2.1、HP 原始版本

    2024年02月05日
    浏览(63)
  • 一天学完C++的标准模板库STL

    提到字符串,我们会想起C语言中的 char * ,这是一个指针。而在STL中 string 也是用来声明字符串的,但是 string 是一个类,需要导入库 #includestring 。 String 封装了 char * ,管理这个字符串,是一个 char* 型的 容器 。 string 本质上是一个动态的 char 数组。 使用String字符串的第一步

    2023年04月17日
    浏览(50)
  • c++标准模板(STL)(std::array)(三)

    template     class T,     std::size_t N struct array; (C++11 起   std::array 是封装固定大小数组的容器。 此容器是一个聚合类型,其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数组,它不会自动退化成 T* 。它能作为聚合类型聚合初始化,只要

    2024年02月02日
    浏览(48)
  • C++——STL标准模板库——容器详解——list

    list:双向链表。list是一种分布式存储的线性表,每个节点分为数据域和指针域,其中指针域中包含一个指向前驱节点的指针和一个指向后续节点的指针,基本模型如下: 1、双向链表:每个元素都有一个前驱和一个后继,这种结构允许在链表的任何位置实现快速的插入和删除

    2024年01月16日
    浏览(48)
  • learn C++ NO.11——string类模拟实现

    本篇文章主要是讲string类的模拟实现,模拟实现的是string类的常用接口以及成员函数。让读者对string类有更深的理解。适当的“造轮子”,有助于我们的语言学习。 string类其实就是一个管理字符数组的线性表,我们可以使用string头文件内提供的接口来对string类进行数据的增删

    2024年02月07日
    浏览(32)
  • (AI创作实验)C++中的STL(标准模板库)

    STL概述 STL: (Standard Template Library) 标准模板库 包含一些常用的算法如排序查找,还有常用的数据结构如可变长数组、链表、字典等。 使用方便,效率较高 要使用其中的算法,需要#include C++中的STL(标准模板库)是一个非常强大的工具,为程序员提供了许多高效的数据结构和算

    2023年04月18日
    浏览(48)
  • c++ 11标准模板(STL) std::vector (二)

    template     class T,     class Allocator = std::allocatorT class vector; (1) namespace pmr {     template class T     using vector = std::vectorT, std::pmr::polymorphic_allocatorT; } (2) (C++17 起) 1) std::vector 是封装动态数组的顺序容器。 2) std::pmr::vector 是使用多态分配器的模板别名。 元素相继存储,这意味着不

    2024年02月02日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包