首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

​C++ STL 探索:String的使用与理解

在接下来的几篇文章中,我们将介绍STL中相关知识点。掌握STL将使我们在使用C++编写代码时更加得心应手。...个人主页: 是店小二呀 C语言笔记专栏: C语言笔记 C++笔记专栏: C++笔记 初阶数据结构笔记专栏: 初阶数据结构笔记 Linux笔记专栏: Linux笔记 喜欢的诗句:无人扶我青云志 我自踏雪至山巅...一、标准库中的string类 在使用string类过程中,必须包括#include头文件以及using namespace std。string类对象支持直接使用cin和cout进行输入和输出。...在现代 C++ 编程中,std::string 已成为处理字符串的首选工具,除非在特定情况下(如需要与 C 代码库兼容)才会选择使用 C-string。...这里是店小二呀C++笔记,希望对你在学习C++语言旅途中有所帮助!

17120
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++之STL】一文学会使用 string

    1. 2 STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费...1. 4 STL的重要性 在C++入门基础介绍(上)这篇博客中我提到过,C++的第一个正式版本的颁布曾因为STL的出现而延误: C++的标准化工作于1989年开始,并成立了一个ANSI和IS0(International...在通过了标准化第一个草案之后,联合标准化委员会又投票并通过了将STL包含到C++标准中的提议。STL对C++的扩展超出C++的最初定义范围。...虽然在标准中增加STL是个很重要的决定,但也因此延缓了C++标准化的进程。 1997年11月14日,联合标准化委员会通过了该标准的最终草案。1998年,C++的ANSI/IS0标准被投入使用。...比如: 补充: 在早期C/C++中auto的含义是使用auto修饰的变量,是具有自动存储器的局部变量,但是后来这个东西变得不重要了。

    19510

    经典算法面试题目-翻转一个C风格的字符串(1.2)

    (C-String means that “abcd” is represented as five characters, including the null character.)...写代码翻转一个C风格的字符串。...(C风格的意思是”abcd”需要用5个字符来表示,包含末尾的 结束字符) 解答: 这道题如果就是要考察你有没有注意到C风格字符串最后的那个结束符,那我觉得还是像书 上写的那样,在代码中有所体现。...; char str[4]=”123”;就是c风格 string是c++中的关键字,和int,float等等一样, 在c++中,string 定义的变量可以直接存储字符串。...在C语言中是没有这种直接存储字符串的变量的。 [ ]里面是4,是因为,C风格的字符串,在最后都会默认添加’\0’,所以”123”本质上是1 2 3 ‘\0’ 它其实是占四个字节。

    24520

    【c++丨STL】string类的使用

    c++标准库当中,定义了一个类用于表示字符串及其操作,叫做string。string类最开始并不属于STL,但是它在c++标准库中的作用与STL紧密相连,于是成为了STL的一员。...使用auto关键字的注意事项: 1. auto变量在定义时必须赋初值,否则编译器会报错。 2. 同一行声明多个auto变量时,所有初值的类型都必须相同。...3. auto修饰指针类型时,使用auto或者suto*是没有区别的,但是修饰引用类型时必须加上 "&"。 4. auto不能直接用于声明数组。...七、string类的非成员函数 最后,我们介绍几个string类相关的非成员函数,它们在string的使用中有至关重要的作用。...如果你觉得博主讲的还不错,就请留下一个小小的赞在走哦,感谢大家的支持❤❤❤ 我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer

    17810

    【C++】STL学习之旅——初识STL,认识string类

    1 STL 简介 现在我正式开始学习STL,这让我期待好久了,一想到不用手撕链表,手搓堆栈,心里非常爽。...学习STL 要阅读部分源代码,主要参考的就是这个版本 2 STL怎么学习 网上有句话说:“不懂STL,不要说你会C++”。...我推荐使用这个:C++库 然后 学好英语很重要,要学会阅读文档,无论学习什么新技术,英语绝对是必不可少的。(程序员的尽头是英语) 3 STL缺陷 STL库的更新太慢了。...STL的使用会有代码膨胀的问题,比如使用vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的 4 string 接下来让我们开始学习string类吧: 4.1 初识 string...在使用string类时,必须包含#include头文件string 以及using namespace std; 4.2 初步使用 构造函数 构造函数 功能 string() (重点) 构造空的string

    15910

    【C++】标准库类型string

    字符串中可以包含任意任意字符,这些字符必须包含在一对英文双引号( " " )之内,例如"abc"。...在使用string类时,必须包含#include头文件以及using namespace std; string类常用接口(成员函数) string类对象默认成员函数 string类对象构造函数...clear()只是将string中有效字符清空,不改变底层空间大小。...c,返回该字符在字符串中的位置substr在str中从pos位置开始,截取n个字符,然后将其返回 push_back()函数 push_back()函数定义: 使用push_back()函数在string...主要是考虑到部分项目中不兼容C++只能转换成C的情况,如下,fopen函数不支持传入string类: 如果想要在C++文件中使用C语言函数且参数是string类的话,就可以调用c_str()函数将string

    15010

    你在 Java 中所理解的 volatile 在 C++ 中可能是错的?

    对 volatile 有误解的人,或者对并发编程不了解的人可能会觉得这段逻辑没什么问题,可能会认为 volatile 保证了,wait() 对 m_flag 的读取,notify() 对 m_flag...C++11 开始,C++ 标准中有了线程的概念,C++ 标准规定了什么情况下一个线程一定可以看到另一个线程做的内存的修改。...从 C++ 标准来说,这段代码是 Undefined Behavior ,既然是 Undefined Behavior 的话,是不是也可能正确执行?...在以上代码中,Thread 1 的 assert 语句可能会失败。就如前文所说,C++ 编译器在保证 as-if 原则下可以随意打乱变量赋值的顺序,甚至移除某个变量。...不同种类的线程同步非常复杂,要涉及到 C++ 的内存模型与并发编程,我就不在此展开。它默认使用的是最强的同步,所以我们就使用默认的就好。

    1.8K50

    为什么std::string_view能解决std::string和char*的性能瓶颈?

    C++提供了std::string和char*两种字符串类型。然而,在某些场景下,它们可能会带来性能问题或设计上的局限性。为了解决这些问题,C++17 引入了 std::string_view。...那std::string_view解决了std::string和char*的什么问题呢 不必要的内存复制:当 std::string 被传递给函数时,通常会发生一次深拷贝操作,即复制整个字符串内容。...具体代码示例如下: //1....因此,在使用 std::string_view 时,必须确保其引用的原始数据在整个生命周期内有效。...然而,std::string_view 不负责内存管理,使用时需要小心数据的生命周期和悬空指针问题。通过合理运用 std::string_view,可以在确保性能的同时,提高程序的安全性和灵活性。

    6600

    EasyC++86,多继承(一)

    作者 | 梁唐 大家好,我是梁唐。 是的,我还没有弃坑,这是EasyC++系列的第86篇,来聊聊多继承 多继承(一) C++支持多继承,即允许一个类同时继承多个类。...另外一派认为多继承在某些场景下可以起到非常关键的作用,应当予以支持。 关于多重继承是好是坏,这是一个非常复杂的问题,网上历来争议不断。因此不过多阐述,感兴趣的同学可以查阅一下相关资料。...C: public A, public B{ ... }; 在这段代码当中我们定义了两个类A和B,然后我们创建了一个类C,同时继承了A和B。...这就是多继承,这里要注意一点,我们必须用关键字public来限定每一个基类,否则的话编译器会默认这是一个私有继承。...从图上来看,这似乎没什么问题,但在实现上问题不少。 比如说,对于SingingWaiter类来说,它当中包含了多少Worker呢?

    17610

    有了 GC 还会不会发生内存泄漏?

    问题的发现 这个问题是我在写C++时考虑到的,C++需要手动管理内存,虽然现在标准库中提供了一些智能指针,可以实现基于引用计数的自动内存管理,但现实环境是很复杂的,我们仍要注意循环引用的问题。...这段代码有什么问题吗?...其实弱引用也不是完美的解决方案,因为限制了API使用者的自由,当然这里也没打算实现一个通用的、完美的解决办法,只是想通过个例子让你知道,即使是在有GC的情况下,不注意代码设计的话,仍有可能会发生内存泄漏的问题...但是GC的运行时间是不确定的,现在计算机的内存也都足够大,内存迟点回收不会有什么问题,但托管对象内部包装的其它资源可能属于“紧张的资源”,比如非托管内存、文件句柄、socket连接,这些资源是必须要被及时回收的...C#中的IDisposable接口和Java中的Closeable接口就是这个作用,因为大多数带GC的语言都使用这种设计,所以这也算是一种模式。 伪代码示例: ? 这样就够了吗?

    1.2K30

    Reddit 观察 | 以排序为案例,对 CCPPRust 安全与性能的相关性研究

    a <= b; // 正确的写法应该是:a < b. }); 这段代码中的问题在于比较函数使用了 <= 运算符,而并非严格小于 < 运算符。...a.cmp(b) }); 这段Rust代码中的排序比较函数有问题,不符合严格弱排序的要求。...C++标准库中的排序实现通常相当古老,这可以解释它们的性能较差。然而,即使是相对较新的 C++ 实现(如ips4o),也完全忽视了使用安全性,甚至在观察安全性方面与测试的标准库实现相比出现了退步。...这有点令人惊讶,因为它的发布日期是2022年,而 Rust 中基于 pdqsort 的不稳定排序在 2017 年合并。 我不明白为什么不能直接从 Rust 转换到 C++,同时满足他们的要求。...就我个人而言,我在工作中花了几天时间调试一些以非常奇怪的方式出错的代码,原因是在比较函数中意外地写成了 <= 而不是 < ,影响了完全不同的地方的逻辑。

    39920

    C++雾中风景4:多态引出的困惑,对象的拷贝?

    在C++中的=操作符的使用与C++呈现的内存模型似乎并不是我所习惯的模式,在拷贝与引用两个不同操作之间摇摆,还是很容易写出存在问题的代码,所以也就引出了今天这篇文章,我们来聊聊=操作符背后的故事。...好吧,上面两段代码我想会让很多Java或Python的程序员深感困惑,看起来C++和我们熟悉的语言想去甚远。...can fly." } 其实这段代码最核心的点是弄明白bird b = p语句中的=操作符真正代表的含义。...为了解释这个=操作符,我们继续看下面这段代码。...那是因为 除了指针与引用类型,C++编译器在编译阶段通过类型静态确定调用函数的地址。 通过这句话,我们也不难理解上一段代码输出的结果,所以我们要更好的使用多态,一定要使用好指针和引用。

    44151

    Cpp虚函数相关知识点

    人要工作,人派生出多个子类后,一个作家工作就是写文章,一个程序员工作却是写代码。工作的执行者不同,工作的内容也不同。 在类中成员函数前面加一个virtual,这个函数就变成了虚函数。...如果一个类中有虚函数,那么编译器会在类的开始位置设置一个虚函数指针,指向一个数组(每一个元素都是函数指针), 这个数组就是虚函数表,它存储着每个虚函数的地址。...由于使用虚函数会导致建立虚函数表,所以会使程序内存消耗变大,效率降低。 可以看这一篇文章探索C++虚函数在g++中的实现,讲的很详细。 析构函数为什么是虚函数 明白了虚函数的特点,这个问题就不难了。...那这样做能解决什么问题呢? 有这样一种情况: 首先我们知道,当子类继承父类的时候,子类中会有父类的成员的一份拷贝。...声明为虚函数只是要求子类必须给出实现,但基类中也可以写出纯虚函数的实现。 析构函数可以是纯虚函数。 参考 C++虚基类详解 c++多继承浅析 C++继承和派生类、虚基类 如有错误,还请指正。

    39920

    EasyLeetCode01,两数之和,刷题界的abandon

    目前C++系列每天更新,LeetCode题解不定期更新,老梁估计大概一周一篇到两篇的速度吧。如果喜欢这类文章,还请大家多多支持。同样,文章会更新在github当中,可以点击「阅读原文」前往。...因为我们使用了map,map要求所有的key必须唯一。如果数组当中存在重复的元素,那么后面读到的数据会覆盖前面的。覆盖会产生什么问题呢?显然会导致答案出错。...ret.push_back(mp[num2]); break; } } return ret; } }; 这段代码和上面几乎完全一样...到这里还没有结束,这段代码仍然可以优化。既然map会发生覆盖,那么我们其实没有必要一开始的时候就一股脑把所有元素全部插入,我们可以一边插入元素一边进行判断。...return ret; } mp[nums[i]] = i; } return ret; } }; 在这段代码当中

    28610
    领券