【C++】STL学习之旅——初识STL,认识string类

小明 2025-04-30 12:14:03 5

string类

  • 1 STL 简介
  • 2 STL怎么学习
  • 3 STL缺陷
  • 4 string
    • 4.1 初识 string
    • 4.2 初步使用
      • 构造函数
      • 成员函数
      • 5 小试牛刀
      • Thanks♪(・ω・)ノ谢谢阅读!!!
      • 下一���文章见!!!

        1 STL 简介

        现在我正式开始学习STL,这让我期待好久了,一想到不用手撕链表,手搓堆栈,心里非常爽。接下来我们先来介绍一下STL:

        STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。 STL 最初由惠普实验室开发,于 1998 年被定为国际标准,正式成为 C++ 程序库的重要组成部分。

        主要分为这几个版本:HP STL、SGI STL、STLport、PJ STL、Rouge Wave STL 等

        其中我们需要重点学习的是SGI版本:

        SGI版本由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版本。被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。学习STL 要阅读部分源代码,主要参考的就是这个版本

        2 STL怎么学习

        网上有句话说:“不懂STL,不要说你会C++”。STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。那么我们应该如何学习呢?

        首先就是关注官方网站 C++中查阅资料。我推荐使用这个:C++库

        然后 学好英语很重要,要学会阅读文档,无论学习什么新技术,英语绝对是必不可少的。(程序员的尽头是英语)

        3 STL缺陷

        1. STL库的更新太慢了。这个得严重吐槽, 上一版靠谱是C++98,中间的C++03基本一些修订。C++11出来已经相隔了13年,STL才进一步更新。
        2. STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。
        3. STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取。
        4. STL的使用会有代码膨胀的问题,比如使用vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的

        4 string

        接下来让我们开始学习string类吧:

        4.1 初识 string

        根据上面我们进行的搜索我们可以了解到 :

        1. string是一个代表字符串的对象。
        2. 标准string类提供了类似标准字符容器的接口,而且添加了单字节操作的特性。
        3. string类 是 basic_string类模版的一个实例,使用char类型来实例化basic_string 模版类。
        4. 注意这个类独立于所使用的编码来处理字节: 如果使用 multi-byte 或 多长度字符(例如UTF-8编码),这个类的所有成员(比如 长度和大小),以及该类的迭代器将仍然在该字节(而不是实际的编码字符)来操作。

        可以总结为以下内容:

        1. string是表示字符串的字符串类
        2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
        3. string在底层实际是:basic_string模板类的别名,typedef basic_stringstring;
        4. 不能操作多字节或者变长字符的序列

        在使用string类时,必须包含#include头文件string 以及using namespace std;

        4.2 初步使用

        构造函数

        构造函数功能
        string() (重点)构造空的string类对象,即空字符串
        string(const char* s) (重点)用C-string来构造string类对象
        string(size_t n, char c)string类对象中包含n个字符c
        string(const string&s) (重点)拷贝构造函数

        来看使用效果:

        #include
        #include
        using namespace std;
        int main() {
        	string s1;
        	string s2("Hello!");
        	string s3(5,'n');
        	string s4(s2);
        	cout 
        	string s1("Hello!");
        	cout 
The End
微信