C++学习笔记之string类

本文详细介绍了C++中的string类,包括常用的构造函数、容量操作、访问和修改操作。重点讨论了拷贝构造函数、赋值运算符以及深浅拷贝的区别。此外,还提到了string类的模拟实现和LeetCode上的相关练习题。
摘要由CSDN通过智能技术生成

c语言中,字符串是以'\0'结尾的一些字符的集合。

如果说需要用到C语言的一些字符串里面的函数,头文件是#include<cstring>。

#include<string>是C++里面的string。

将从以上这几个方面进行阐述说明。 

https://blog.csdn.net/u011000290/article/details/49020335

大佬把拷贝构造,构造,析构函数,赋值函数很清楚。大佬不愧是大佬。

string类的常用接口说明

1.string类对象的常见构造。 

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
  string s1;
  //string() 构造空的string类对象,即空字符串
  string s2("hello world!");
  //string(const char* s)用c-string来构造string类对象
  string s3(10,'a');
  //string(size_t n,char c)string类对象包含n个字符c
  string s4(s2);
  //string(const string &s)拷贝构造函数
  string s5(s3,5);
  //string(const string &s,size_t n)
  //用s中的前n个字符构造新的string类对象
  cout<<s1<<endl;
  cout<<s2<<endl;
  cout<<s3<<endl;
  cout<<s4<<endl;
  cout<<s5<<endl;
  return 0;
}

有5种常见构造,需要注意的是拷贝构造函数这一种。

https://www.cnblogs.com/wangguchangqing/p/6141743.html这是一位大佬写的拷贝构造和赋值运算符的一些知识。

我不是很懂const char* s,char const * s,char* const s;

首先,const char* s,根据运算符优先级,*s首先先结合,代表指针,char代表指针类型,p指向的内容为const类型不可修改。

char const* s首先没有const*这种类型,所以const 修饰的和前面的是一样的,char const* s和const char* s是一样的。

char* const s 定义一个指向字符的指针常数,即const指针,不能修改指针,但能修改指针指向的内容。

https://blog.csdn.net/m0_37806112/article/details/81252151

https://blog.csdn.net/SilentOB/article/details/76994618这两篇博客讲述的很清楚。

2.string类对象的容量操作。

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
  string s("hello world!");
  cout<<s.size()<<endl;
  cout<<s.length()<<endl;
  cout<<s.capacity()<<endl;
  cout<<s<<endl;
  s.clear();
  //清空时只是将size清0,并不改变底层空间的大小也就是说容量大小不变
  cout<<s.size()<<endl;
  cout<<s.capacity()<<endl;
  s.resize(10,'a');
  cout<<s.size()<<endl;
  cout<<s.capacity()<<endl;
  cout<<s<<endl;
  s.resize(25);//此时的有效字符个数增加到25个,多余的用'\0'来填充
  cout<<s.size()<<endl;
  cout<<s.capacity()<<endl;
  cout<<s<<5<<endl;
  s.resize(10);//此时的有效字符个数减少到10个,多余的用'\0'来填充
  cout<<s.size()<<endl;
  cout<<s.capacity()<<endl;
  cout<<s<<5<<endl;
  string s2;
  s2.reserve(100);
  cout<<s2.size()<<en
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值