string的常用接口讲述(跑路人笔记)<stl初阶>

本文介绍了C++中的string类,详细讲解了构造函数、迭代器、常用接口如size、length、capacity、reserve和resize等,并探讨了符号重载如[]和operator=的操作。文章旨在帮助读者理解和掌握C++中string类的基本使用。
摘要由CSDN通过智能技术生成

前言

string介绍主要来自网站cplusplus.com我尽量将自己的想法和网站文档给的相结合,增加思考以方便我们的记忆

也可以去C++的官网上查看最新的文档记录cppreference.com

此篇博客就是要以string为例子讲述第一个网站的使用。

string

string是一个用于表示字符串的类,里面有大量已经封装好的成员,函数等.不过也常有大佬表示string类里塞了太多东西显得十分臃肿不堪.但是作为C++的一个库类他依旧是十分优秀的一个功能,本篇文章就是将string里常用的函数接口向大家介绍一番.(更况且大部分的题目都有他的身影)

string这个类被放在<string>这个库中,在使用的时候#include<string>一下即可。

网站将此信息放在红框圈住的部分中了。

image-20220604152228278

接下来让我们看看string的介绍吧。

image-20220604153703199

下面的英文是对string的文字介绍。

用有道翻译如下

image-20220604155558119

不细讲了,大家有兴趣的话可以自己看。

string结构剖析

这里存放的就是string的结构部分了。—这部分是文本介绍的下面所有内容。

image-20220604184047234

构造函数

既然是类的我们就要看一下他的构造函数了。

image-20220604183809241

我们的库一共提供了如此多的构造函数,而我们比较常用的是那些呢?

其实比较常用的也就是(1)(2)(4)其他部分也就没那么常用。

介绍一下吧

(1)部分就是传递无参的构造函数。(字符串是空字符串"\0")

(2)部分其实就是一个拷贝构造

(3)部分我们可以从一个常量字符串部分读取部分,pos是我们读取的位置,len是从pos位置读取的长度。 如下

image-20220604185151599

​ (3)部分中的len的缺省值npos其实是类里的一个静态成员变量,如下图:

image-20220604191653922

​ 因为是size_t类型的-1所以其实是最大的int值。也就是说,如果我们用这个构造函数不传len的话其实是 默认从pos的位置初始化到结束部分。

(4)部分其实就是传递一个常量字符串

(5)部分传递一个常量字符串 n是从下标的某个位置开始打印。

(6)是传递n个字符c

(7)部分需要后续内容才可以讲解。


析构函数没什么可讲的,string只提供了一个析构函数还是自动调用跟我们使用者几乎没有关系 。


迭代器

image-20220604195106418

注:在上面表格里我们可以看见类似于const_reverse_iterator这样的,其实在前面有注释,

注释如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是手动实现这些头文件里所有的STL容器的代码: ``` // iostream namespace mystd { class ostream { public: ostream& operator<<(const char* str) { // 实现输出字符串的逻辑 return *this; } // 其他重载运算符和成员函数 }; static ostream cout; } // memory namespace mystd { template<typename T> class allocator { public: using value_type = T; // 实现分配和释放内存的函数 }; } // stack namespace mystd { template<typename T, typename Container = mystd::vector<T>> class stack { public: using value_type = T; using container_type = Container; // 实现栈的各种函数 }; } // fstream namespace mystd { class filebuf { public: // 实现文件缓冲区相关函数 }; class ifstream { public: ifstream(const char* filename) { // 实现打开文件的逻辑 } // 实现读取文件的逻辑 }; class ofstream { public: ofstream(const char* filename) { // 实现打开文件的逻辑 } // 实现写入文件的逻辑 }; } // vector namespace mystd { template<typename T, typename Allocator = mystd::allocator<T>> class vector { public: using value_type = T; using allocator_type = Allocator; // 实现vector的各种函数 }; } // cmath namespace mystd { double pow(double base, double exponent) { // 实现求幂函数 } // 其他数学函数的实现 } // iomanip namespace mystd { class setprecision { public: setprecision(int n) { // 实现设置输出精度的逻辑 } // 其他重载运算符和成员函数 }; } // exception namespace mystd { class exception { public: virtual const char* what() const noexcept { return "Unknown exception"; } }; } // climits namespace mystd { constexpr int INT_MAX = 2147483647; // 其他常量的定义 } // array namespace mystd { template<typename T, std::size_t N> class array { public: using value_type = T; // 实现数组的各种函数 }; } // cstdint namespace mystd { using int8_t = signed char; using int16_t = short int; using int32_t = int; using int64_t = long long int; // 其他数据类型的定义 } // string namespace mystd { class string { public: // 实现字符串的各种函数 }; } ``` 以上代码只是简单实现了各个STL容器的基本功能,具体实现方式和函数可能会有所不同,仅供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就一个挺垃圾的跑路人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值