STL での文字列の使用法をすぐに理解する

C 言語と比較した C++ の明らかな利点は STL です。C++ には既製のデータ構造が多数あり、問題を解決するためにそれらを使用することが非常に便利です。次に、新しいメンバーであるstringを紹介します。

文字列クラスとは何ですか?

まず最初に、文字列クラスに関するドキュメントを見てみましょう:文字列クラスのドキュメントの紹介

概要: 1. 簡単に言うと、これは文字列を表すクラスであり、カプセル化されたさまざまなインターフェイスを呼び出して文字列に対して対応する操作を実行します。

2. String は、実際には、最下位層の basic_string テンプレート クラスのエイリアス、typedef Basic_string<char, char_traits, allocator>

3. string クラスを使用する場合は、ヘッダー ファイル #include をインクルードし、名前空間 std を使用する必要があります。

文字列クラスの共通呼び出しインターフェース

    • 文字列クラスオブジェクトの一般的な構造

( construct )関数の構築

機能の説明

string() (強調)

string(const char* s) (強調)

C 形式の文字列で構築されます

文字列(size_t n, char c)

文字列クラス オブジェクトには n 個の文字が含まれています。 c

string(const string&s) (重点)

コピーコンストラクター

使用状況表示:

2.文字列オブジェクトの容量操作

関数名

機能の説明

サイズ(強調)

文字列の有効な長さを返します。

長さ

文字列の有効な長さを返します。

容量

スペースの合計サイズを返します

(強調)

文字列が空かどうかを判断し、空の場合は true を返し、空でない場合は false を返します。

clear(重点)

清空字符串

reserse(重点)

为字符串预留空间

resize(重点)

将字符的个数改为n个,多出的空间用字符填充

q:这时就会有人困惑了,size和length的功能一样,为什么要设计两个不同的函数呢??

答:在我们后面会学习不同类型的数据结构如vector、list、map等等,显然有的不适合用length来封装容器中数据的有效个数,使用size是为了保证接口的一致性。

用法展示:


注:clear函数只清除有效字符,不改变容量的大小。

注:reserve函数的功能是提前预留空间,但空间的大小并不能根据你给的值而定,是编译器根据你给的空间的小而预留出合适的空间大小。另外,reserve函数只扩容不缩容!!



通过图我们可以分为以下3种情况:

  1. 当resize中参数的值<size()函数返回的值,我们可以理解成删除数据,即把数据删成只剩下resize中的参数值。

  1. 当resize中参数的值>=size()函数返回的值&& 当resize中参数的值<=capacity()函数返回的值,我们可以理解成只是改变size的大小不改变capacity的大小,如果resize()中的参数指定了某个字符,那么原数据中末尾会补齐这个特定的字符直到字符串达到size的大小,不写则默认不补。

3.当resize中的参数值>capacity()函数返回的值时,我们就可以理解成扩容,类似于reserve函数。

string类对象的访问及遍历操作

函数名称

功能说明

operator[](重点)

返回pos位置的字符(支持随机访问)

begin+end

begin获取第一个字符迭代器,end获取最后一个字符的下一个位置的迭代器

rbegin+rend

反向迭代器

范围for

c++11支持

下标的随机访问:

迭代器遍历:

string类对象的修改操作

函数名称

功能说明

push_back

尾插字符

append

追加一个字符串

operator+=(重点)

追加字符串

c_str(重点)

返回c格式字符串

find+npos(重点)

从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置

rfind

从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置

substr

在str中从pos位置开始,截取n个字符,然后将其返回

代码演示:


使用find函数时如果找得到字符就返回该字符所在位置(位置下标),找不到时就返回npos,npos的值为-1。substr函数是截取字符串。

string类非成员函数

函数名称

功能

operator+

尽量少用,传值返回,导致深拷贝效率低

operator>>(重点)

输入运算重载符号

operator<<(重点)

输出运算重载符号

getline(重点)

获取一行字符串

relational operators(重点)

大小比较

swap

字符串交换

getline的用法:

relational operators的用法:

其余接口非常简单咱就不一一多说了。

到现在位置我们string类学的就差不多了,我讲解的是平常用的比较多以及比较重要的函数接口,如有什么错误请大家给我指正出来我一定虚心请教~~感谢老铁支持!!

おすすめ

転載: blog.csdn.net/m0_69005269/article/details/128548729