C++STL入门:string的基本使用小笔记

简介: C++STL入门:string的基本使用小笔记

目录

一.string类简介

二.string类的常用成员接口

1.string类对象的构造函数接口

  1. string类对象的容量操作接口

    std::string::size

           std::string::length
    
           std::string::empty
    
           std::string::clear
    
           std::string::resize
    
           std::string::reserve
    

3.string类对象的访问及遍历操作接口

                        std::string::operator[]
  1. string类对象中字符串的修改操作接口

    std::string::operator+=

一.string类简介
string是表示字符序列的类(只适用于单字节字符类型)。
string类的接口与常规容器的接口基本相同
string类是basic_string类模板的一个char类型的实例,string是宏定义的类名:
typedef basic_string<char, char_traits, allocator> string
使用string类时,必须包含#include,string类定义在命名空间std中
二.string类的常用成员接口
1.string类对象的构造函数接口
string主要的构造函数有四个重载:

include

include

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main()
{

string a;                        调用无参构造函数

string b("hello world");        调用形参为const char* 的构造函数

string c(b);                    调用string的拷贝构造函数,用b去拷贝构造c

return 0;

}

监视窗口中的size指的是string对象存储的字符串的有效字符个数(也是可以被访问到的元素个数)(存储的有效数据的个数)
监视窗口中的capacity指的是当前string对象的存储容量(大于或等于size)
string对象可以根据实际情况自动扩充存储容量,用户也可以自行调用相关接口来调整其容量
allocator是供string对象使用的空间配置器(内存池)

  1. string类对象的容量操作接口

size()和length()
std::string::size
size_t size() const;
std::string::length
size_t length() const;
这两个接口的功能是一样的,使用size会更好(因为其他容器也是用size来获取有效数据个数的) (const修饰的是this指针)

empty()和clear()
std::string::empty
bool empty() const;
std::string::clear
void clear();
empty()的功能是检测string中存储的是否为空字符串(无有效字符,size为0),empty不会改变string的字符串内容,也不会改变其存储空间大小(capacity)
clear()的功能是将string中有效字符个数置为0(size置为0),但是不改变其存储空间大小(capacity不变)

resize接口
string的resize接口有两个重载

std::string::resize
void resize (size_t n);
​​​​​​​void resize (size_t n, char c);
void resize (size_t n)的功能是将string的有效字符串长度(size)调整为n个(n若大于原来string的有效字符长度(size),则多出的有效字符用'\0'来填充)(注意n小于string原本的有效字符长度(size)时,不会改变string的容量capacity)。
​​​​​​​void resize (size_t n, char c)的功能是将string的有效字符串长度(size)调整为n个,如果n大于string原本的有效字符长度(size)则多出的有效字符用字符c来填补(注意n小于string原本的有效字符长度(size)时,不会改变string的容量capacity)
​​​​​​​ reserve接口
std::string::reserve
void reserve (size_t n = 0);
reserve的功能是将字符串的存储容量capacity预设为n(注意reserve只能扩容不能缩容,当n小于string原capacity大小时,该函数不会改变capacity)

如果预先知道字符串要存储的有效字符个数,最好先用reserve预设好string的容量以避免后续多次进行容量调整(频繁的容量调整会降低程序的运行效率)

3.string类对象的访问及遍历操作接口

operator[] : 运算符[]在string中有两个重载

std::string::operator[]
char& operator[] (size_t pos);

const char& operator[] (size_t pos) const;
[]运算符重载的功能是返回字符串中下标为pos位置的字符的引用(不带const的可读可写,带const的只可读不可写)

用迭代器去遍历容器的有效数据(迭代器遍历法通用于所有容器)
迭代器在使用层面上类似于指针:

begin()接口可以返回指向容器首个有效数据的迭代器

end()接口可以返回指向容器末尾有效数据下一个位置空间的迭代器

int main()
{

string b("hello world");        //调用形参为const char* 的构造函数

auto it = b.begin();            //auto自动识别的类型为 std::string::iterator 
while (it != b.end())
{
    cout << *it;                
    ++it;
}

return 0;

}

用指针来类比记忆:

  1. string类对象中字符串的修改操作接口

operator+= (+=的运算符重载)
std::string::operator+=
将一个string对象的字符串追加到string对象的字符串中。
string& operator+= (const string& str);
将一个常量字符串追加到string对象的字符串中
string& operator+= (const char* s);
将一个字符追加到string对象的字符串中
string& operator+= (char c)

相关文章
|
17小时前
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
11 2
C++入门12——详解多态1
|
17小时前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
12 1
|
17小时前
|
编译器 C++
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
7 0
|
17小时前
|
程序员 C++
C++入门11——详解C++继承(菱形继承与虚拟继承)-1
C++入门11——详解C++继承(菱形继承与虚拟继承)-1
9 0
|
18小时前
|
存储 算法 C++
C++入门10——stack与queue的使用
C++入门10——stack与queue的使用
8 0
|
18小时前
|
存储 C++ 容器
C++入门9——list的使用
C++入门9——list的使用
8 0
|
18小时前
|
存储 C++ 容器
C++入门8——vector的使用
C++入门8——vector的使用
9 0
|
18小时前
|
C语言 C++
C++番外篇——string类的实现
C++番外篇——string类的实现
9 0
|
18小时前
|
C++ 容器
C++入门7——string类的使用-2
C++入门7——string类的使用-2
10 0
|
2天前
|
安全 编译器 程序员
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
13 2