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种情况:
当resize中参数的值<size()函数返回的值,我们可以理解成删除数据,即把数据删成只剩下resize中的参数值。
当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类对象的修改操作
函数名称 |
功能说明 |
尾插字符 |
|
追加一个字符串 |
|
operator+=(重点) |
追加字符串 |
c_str(重点) |
返回c格式字符串 |
从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置 |
|
从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置 |
|
在str中从pos位置开始,截取n个字符,然后将其返回 |
代码演示:
使用find函数时如果找得到字符就返回该字符所在位置(位置下标),找不到时就返回npos,npos的值为-1。substr函数是截取字符串。
string类非成员函数
函数名称 |
功能 |
尽量少用,传值返回,导致深拷贝效率低 |
|
operator>>(重点) |
输入运算重载符号 |
operator<<(重点) |
输出运算重载符号 |
getline(重点) |
获取一行字符串 |
大小比较 |
|
字符串交换 |
getline的用法:
relational operators的用法:
其余接口非常简单咱就不一一多说了。
到现在位置我们string类学的就差不多了,我讲解的是平常用的比较多以及比较重要的函数接口,如有什么错误请大家给我指正出来我一定虚心请教~~感谢老铁支持!!