千家信息网

C++STL容器中string类怎么用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关C++STL容器中string类怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言为什么学习string类:在C语言中,字符串是以
千家信息网最后更新 2026年11月03日C++STL容器中string类怎么用

这篇文章将为大家详细讲解有关C++STL容器中string类怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

前言

为什么学习string类:

在C语言中,字符串是以'\0'结尾的集合,为了操作方便,在C标准库中提供一些str系列的函数(strstr,strcmp,strcpy……),但是这些库函数和字符串时分离的,不太符合oop的思想。稍不留神就会造成越界访问。

在OJ题中,有关字符串的题目基本以string的形式出现,而且在常规的工作中,为了简单,方便,快捷,基本都是使用string类,很少有人会使用C库中的字符串操作函数。

1.标准库中的string类

1.string类是表示字符串的字符种类。

2.该类的接口与常规容器的接口基本相同,在添加一些专门用来操作string的常规操作。

3.string的底层是:basic_string模板类的别名。

4.不能操作多字节或者变长字符的序列。

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

2.string类的常用接口说明

2.1 string对象的常见构造

string()构造空的string类对象
string(const char* str)以常量字符创为参数构造string类
string(size_t n,char ch)string对象中包含了n个字符c
string(const string& s)

拷贝构造函数

#include#includeusing namespace std;int main(){        string s1;        string s2("CSDN");        string s3(4, 'A');        string s4(s2);        cout << s1 << endl;        cout << s2 << endl;        cout << s3 << endl;        cout << s4 << endl;} [点击并拖拽以移动]

运行结果:

2.2 string类对象的容量操作

size返回字符串的有效长度
length和size一致,推荐使用size
capacity返回总空间大小
clear清空有效字符,但是不对capacity有影响
reserve为字符串预留空间
empty判断字符串是否为空串,返回值为bool
resize

将有效字符的个数该成n个,多出的空间用字符c填充

2.2.1 reserve是如何开辟空间的

void reserve (size_t n=0)

void TestPushBack(){        string s;        size_t sz = s.capacity();        for (int i = 0; i < 1000; ++i)        {                s.push_back('c');                if (sz != s.capacity())//当sz和_capacity不相等的时候,说明reserve已经增容了。                {                        static int n = 1;                        sz = s.capacity();                        printf("第%d次开辟空间:_capacity=%d\n", n++, sz);                }        }}

运行结果:

说明在VS的环境下,reserve每次开辟的空间是前一次空间的约1.5倍。

2.2.2 clear 和 empty

void clear ()

bool empty() const

#include#includeusing namespace std;int main(){        string s1("CSDN");        cout << s1.capacity() << endl;        cout << s1.empty() << endl;        s1.clear();             cout << s1.capacity() << endl;        cout << s1.empty() << endl;}

运行结果:

说明了clear只会清理有效的字符串,不会对空间的大小有影响,当clear后,empty的返回值为0,说明了此时的是s1是空字符串。

2.2.3 resize的用法

void resize(size_t n)

void resize(size_t n,char ch)

#include#includeusing namespace std;int main(){        string s1("CSDN");        s1.resize(10, 'A');//输出的是------>CSDNAAAAAAAA        cout <

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

operator[ ]

返回 pos 位置的字符, const string 类对象调用

begin+end

begin 获取一个字符的迭代器 + end 获取最后一个字符下一个位置的迭代器 (正向迭代器)

rbegin+rend

begin 获取一个字符的迭代器 + end 获取最后一个字符下一个位置的迭代器 (反向迭代器)

范围forC++11支持的更简洁的遍历方式

const_iterator begin()const

iterator begin()

#include#includeusing namespace std;int main(){        string s1("hello CSDN");        auto it1= s1.begin();//正向迭代器        while (it1 != s1.end())//end指向的是最后一个元素的下一位        {                cout << *it1 << " ";                it1++;        }        cout << endl;        auto it2 = s1.rbegin();//反向迭代器        while (it2 != s1.rend())        {                cout << *it2 << " ";                it2++;        }}

运行结果:

范围for的使用
#include#includeusing namespace std;int main(){        string s1("hello CSDN");        for (auto ch :s1)                cout << ch<< " ";}

本质上,范围for调用的是迭代器。

2.4 string类对象的修改操作

push_back尾插字符ch
append尾插字符串str
operator+=尾插字符ch/尾插字符串
c_str返回C格式字符串
find+npos

从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置,npos是size_t的最大值

rfind

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

substr

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

2.4.1 push_back 和 append 以及operator+=

void push_back(char ch)

string& append(const char* str)

string& operator+=(char ch)

string& operator+=(const char* str)

#include#includeusing namespace std;int main(){        string s1("hello ");        s1.push_back('C');        s1.append("SDN");        cout << s1 << endl;        string s2("hello ");        s2 += 'w';        s2 += "orld";        cout << s2 << endl;}

运行结果:

operator +=可以尾插字符,也可以尾插字符串。实际上,operator +=尾插字符的时候,调用的是push_back,尾插字符串的时候,调用的是append。

2.4.2 find 和 rfind 以及 substr

size_t find(char c,size_t pos=0) const

size_t rfind(char c,size_t pos=npos)

string substr(size_t pos=0,size_t len=npos)

#include#includeusing namespace std;int main(){        string s1("hello CSDN");        cout << s1.find('C') << endl;        cout << s1.rfind('C',0) << endl;//从pos=0处,即字符'h'往前找,找不到字符'C'返回的是npos                                        //npos是size_t中的最大值--->4294967295        cout << s1.rfind('C', 8) << endl;        cout << s1.substr(2, 3) << endl;//从字符串的第二个位置开始,截取len=3个字符}

运行结果:

2.5 string非成员函数重载

operator+尽量少用,因为传值返回,导致深拷贝效率低
operator<<输出运算符重载
operator>>输出运算符重载
getline获取一行字符串
relational operator大小比较

关于"C++STL容器中string类怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

字符 字符串 迭代 位置 空间 对象 结果 运行 函数 有效 时候 容器 大小 常规 接口 篇文章 范围 输出 拷贝 明了 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 新华互联网科技学院 没上市的科技互联网公司 上海互联网科技有限公司 狮子座互联网科技 上海喔噻互联网科技 天下捷融互联网科技 互联网金融和金融科技 互联网科技公司名称 互联网公司会议桌创意科技软装饰 卫星互联网科技股票 互联网和黑科技的看法 西安小鹰速贷互联网科技有限公司 图游互联网科技 2021世界互联网领先科技成果发布 吉林省码上互联网科技电话 互联网时代科技型公司的机会 西安左小互联网科技有限公司 数字互联网科技有限公司 互联网的科技体现在哪里 网互联网络科技 深圳艾佳互联网科技 宜昌元轩互联网科技有限公司 深圳市优智互联网科技有限公司 广州富喜互联网络科技 湖北辰鑫科技互联网 中国科技和美国互联网 西安左小互联网科技有限公司 恒生互联网科技趋势 银川新华互联网科技学校招聘 如何强化互联网金融科技
0