2021-01-15

本周的学习总结


前言

一、String类是什么?

string类是由头文件< string >支持的(注意,头文件< string.h >和< cstring >
支持对C风格字符串进行操纵的C库字符串函数,但不支持string类)。

string类包含大量的方法,其中包括了若干构造函数、用于将字符串赋给变量、合并字符串、比较字符串和访问各个元素的重载运算符以及用于在字符串中查找字符和子字符串的工具等。总之,string类包含的内容很多。

二、string类函数

1.字符串长度:length();
string a(“I like china”);
cout<<a.length();
2.字符个数:size();
string a(“I like china”);
cout<<a.size();
3.关于容量的函数
(1).capacity();

返回当前分配给字符串的内存块的大小

string a(“I like china”);
cout<<a.capacity();
(2).reserve();

让操作者能够请求内存块的最小长度,也就是将容量变大,但不能变小。

string a(“I like china”);
cout<<a.reserve();
4.重新设置字符个数:resize();

s.resize(8);
cout<<s.capacity()<<endl;
cout<<s.length()<<endl;
cout<<s.size()<<endl;
cout<<s<<endl;

容量大小未变,字符长度改变。

5、输出/修改单个字符函数:at();
输出

string  a("I like china");
cout<<a.at(1)<<endl;

结果是空格
修改

string  a("I like china");
s.at(1)='t';
cout<<s.c_str()<<endl;

空格被换成t
6、输出全部字符:c_str
string s1=“That is a question”;
cout<<s1.c_str();
7、插入函数
(1)任意位置插入:insert();

a1.insert(0,"          ");
cout<<a1<<endl;

此处插入了多个空格

(2)末尾插入/添加:append();

a.append(a1);
cout<<a<<endl;

8、指定函数:assign();
a1.assign(“what are you saying”,3);
cout<<a1<<endl;
输出前三个字符。

比较字符串大小:compare();
9、(1)整串比较

string str1="abcd";
string str2="bcdefg";
cout<<str1.compare(str2)<<endl;
//整体比较

//如果str1>str2,返回 1,str1=str2返回 0 ,str1<str2返回 -1.下同

(2)部分与整串比较

string str1="abcd";
string str2="cdefg";
cout<<str1.compare(1,2,str2)<<endl;
//str1的前两个与str2比较

(3)部分与部分比较

string str1="abcd";
string str2="cdefg";
cout<<str1.compare(1,2,str2,1,2)<<endl;
//str1的前两个与str2的前两个比较

11、复制函数:copy();
将对象中的某部分复制进一个字符数组内:

char a[10]={0};
str1.copy(a,4,0);
//4表示选取的个数,0是位置下标
cout<<a<<endl;

结果为abcd

12、查找函数:find();
(1)查找子串

cout<<(int)s.find("question")<<endl;

cout<<(int)s.find(s1,2)<<endl;
// //若找到返回子串第一个元素的下标
//没有找到返回-1

(2)查找字符

cout<<(int)s.find('t')<<endl;
返回第一个被找到的元素下标
未找到返回-1

13、返回子串函数:substr();
cout<<s.substr(38,46);
//返回38~46之间的子串
//输出结果为question

14.删除字符:erase;
a.erase(18,8);
//删除从第18个元素开始的8个字符
cout<<a<<endl;
15.替换字符:replace;

a.replace(0,2,“To”);
cout<<a<<endl;
把0~2的字符替换为"To"

三、Vector的知识点

vector被翻译为容器,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象。

操作;
1.删
pop_back()删除尾部
erase()删除指定位置的元素
clear()直接清空
unique()删除重复
2.增
push_back()在尾部添加
insert()在中间插入
3.调
resize()调整大小
reverse()翻转数组
4.改
assign()修改
5.其他类型的函数
swap()交换
sort()排序
capacity()能容下的元素的数量
merge()合并两个链表的元素
2.定义
(1)定义int型
(2)定义string型
(3)定义结构型数组
(4)还可以定义多维数组
他的一 维大小是固定的,第二维是动态的。
例如:

vector< int>a;//定义int型数组
vector< string >a;//定义string型数组
struct a{
int like;}
vector<a>t//定义结构型数组
vector< int>a[5];//定义二维数组

四.list的知识点

STL的list是数据结构的双向链表,它的内存空间可以不连续,通过指针来进行数据的访问,它可以高效的地在任意地方删除和插入

list和vector的优缺点正好相反,他们的应用场景不同。
(1)vector:插入和删除操作少,随机访问元素频繁
(2)list:插入和删除频繁,随机访问少。

push.back();
push.front();
pop.back();
pop.front();//在头、尾进行删除和插入
assign();//赋值,如list.assign(5,8),5个8
assign(begin,end);//将区间(左闭右开)赋值中数据拷贝赋值给本身,list.assign
sort();//假设用list.sort表示
reverse();//将链表元素颠倒,list.reverse
remove();//移除链表中元素,list.remove
swap();//交换两个链表中的元素,list1.swap(list2)
unique();//删除重复,list.unique表示
merge();//合并两个链表中的元素,list1.merge(list2)

五.数据、数据元素、数据项和数据对象的联系与区别

数据:是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号总称。
数据元素:是数据的基本单位。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。

数据 项--> 数据元素--> 数据
  数据 项--> 数据元素  -> 数据对象   

其中数据元素与数据的关系:是集合的个体
数据对象与数据的关系:是集合的子集

六. 数据结构

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
数据结构包括逻辑结构和存储结构两大类
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。逻辑结构包括集合结构、线性结构、树结构、图结构或网结构。
存储结构:把数据对象存储到计算机时,通常要求既要存储各数据元素的数据,又要存储数据元素之间的逻辑关系。存储结构包括顺序存储结构和链式存储结构。其中 顺序存储结构是借助元素在存储器的相对位置来表示数据元数之间的逻辑关系。而链式存储结构无需占用一整块的存储空间。但为了表示结点之间的关系,需要给每个节点附加指针字段,用于存放后继元素的存储地址。

七.线性表和特点

一个数据元素 可以包含若于

个数据项。例如在第1章中提到的学生基本信息表,每个学生为-个数据元素, 包括学号、姓名性别、籍贯、专业等数据项。

由以上示例可以看出,它们的数据元素虽然不同,但同-线性表中的元素必定具有相同的牛性,即属于同一数据对象,相邻数据元素之间存在着序偶关系。

诸如此类由n (n≥0)个数据特性相同的元素构成的有限序列称为线性表。

线性表中元素的个数n (n≥0)定义为线性表的长度,n= 0时称为空表。

对于非空的线性表或线性结构,其特点是:

(1)存在唯一 的一一个被称作“第- 个”的数据元素;

(2)存在唯一-的一个被称作“最后一个”的数据元素;

(3)除第一个之外,结构中的每个数据元素均只有一个前驱;

(4)除最后-一个之外,结构中的每个数据元素均只有一个后继。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值