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)

相关文章
|
2月前
|
编译器 C++ 容器
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
77 2
|
3月前
|
存储 安全 C语言
C++ String揭秘:写高效代码的关键
在C++编程中,字符串操作是不可避免的一部分。从简单的字符串拼接到复杂的文本处理,C++的string类为开发者提供了一种更高效、灵活且安全的方式来管理和操作字符串。本文将从基础操作入手,逐步揭开C++ string类的奥秘,帮助你深入理解其内部机制,并学会如何在实际开发中充分发挥其性能和优势。
|
2月前
|
存储 算法 C++
【c++丨STL】map/multimap的使用
本文详细介绍了STL关联式容器中的`map`和`multimap`的使用方法。`map`基于红黑树实现,内部元素按键自动升序排列,存储键值对,支持通过键访问或修改值;而`multimap`允许存在重复键。文章从构造函数、迭代器、容量接口、元素访问接口、增删操作到其他操作接口全面解析了`map`的功能,并通过实例演示了如何用`map`统计字符串数组中各元素的出现次数。最后对比了`map`与`set`的区别,强调了`map`在处理键值关系时的优势。
166 73
|
2月前
|
存储 分布式计算 编译器
C++入门基础2
本内容主要讲解C++中的引用、inline函数和nullptr。引用是变量的别名,与原变量共享内存,定义时需初始化且不可更改指向对象,适用于传参和返回值以提高效率;const引用可增强代码灵活性。Inline函数通过展开提高效率,但是否展开由编译器决定,不建议分离声明与定义。Nullptr用于指针赋空,取代C语言中的NULL。最后鼓励持续学习,精进技能,提升竞争力。
|
2月前
|
存储 算法 C++
【c++丨STL】set/multiset的使用
本文深入解析了STL中的`set`和`multiset`容器,二者均为关联式容器,底层基于红黑树实现。`set`支持唯一性元素存储并自动排序,适用于高效查找场景;`multiset`允许重复元素。两者均具备O(logN)的插入、删除与查找复杂度。文章详细介绍了构造函数、迭代器、容量接口、增删操作(如`insert`、`erase`)、查找统计(如`find`、`count`)及`multiset`特有的区间操作(如`lower_bound`、`upper_bound`、`equal_range`)。最后预告了`map`容器的学习,其作为键值对存储的关联式容器,同样基于红黑树,具有高效操作特性。
103 3
|
3月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
3月前
|
存储 算法 C++
【c++丨STL】priority_queue(优先级队列)的使用与模拟实现
本文介绍了STL中的容器适配器`priority_queue`(优先级队列)。`priority_queue`根据严格的弱排序标准设计,确保其第一个元素始终是最大元素。它底层使用堆结构实现,支持大堆和小堆,默认为大堆。常用操作包括构造函数、`empty`、`size`、`top`、`push`、`pop`和`swap`等。我们还模拟实现了`priority_queue`,通过仿函数控制堆的类型,并调用封装容器的接口实现功能。最后,感谢大家的支持与关注。
139 1
|
3月前
|
存储 算法 C++
深入浅出 C++ STL:解锁高效编程的秘密武器
C++ 标准模板库(STL)是现代 C++ 的核心部分之一,为开发者提供了丰富的预定义数据结构和算法,极大地提升了编程效率和代码的可读性。理解和掌握 STL 对于 C++ 开发者来说至关重要。以下是对 STL 的详细介绍,涵盖其基础知识、发展历史、核心组件、重要性和学习方法。
|
2月前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
80 11

热门文章

最新文章