学习完了栈与队列之后呢,我们紧接着学习了字符串与数组。关于本章学习的字符串与数组的内容,下面我写一下自己对本章内容的理解。
数组是数据结构中的基本模块之一。因为字符串是由字符数组形成的,所以二者是相似的。数组的很多属性和处理方法在字符串中也是适用的,数组和字符串都属于比较基础的数据结构类型,他们都属于顺序存储结构。顺序存储结构即在内存空间中通过占位的形式,将相同数据类型的一系列数据元素存储到一块连续的内存空间中。
一、数组
定义和初始化:
int a0[5];
int a1[5] = {1, 2, 3},其余的位置会被默认初始化为0。
获取数组长度
C++的操作中,还有专门获取数组长度的函数:a.size(),返回的是数组的长度。
size()函数不仅在数组中有所体现,在C++中它适用于很多标准模版,例如vector,string,list等等。
由于数组属于顺序存储结构,一个数组的数据元素都是连续存储的,所以在知道一个数组的首地址之后,就能够根据某个数据元素在该数组中的位置查找到该数据元素(即数组的索引),从而对其进行读写操作。如a[0]即为索引0对应的元素,就是数组的第一个元素。
注:数组的索引是从0开始的,数组所能访问到的最大索引为数组的的长度(size())减一。
多维数组
此处说说对二维数组的个人理解,三维及三维以上的数组以此类推。
二维数组可以当作矩阵来看,普通的一维数组其实就是二维数组的一行或者一列。二维数组使用行索引和列索引来访问和遍历数组的每个元素。
例如:int example[3][6],第一行第一列的元素为example[0][0],第三行第六列元素为 example[2][5],(注:下标是从0开始的)。
在内存空间中,一维数组是顺序存储结构,相当于数组按照索引顺序在内存地址中依次排列;对于二维数组来说,其存储方式也是顺序存储结构,将二维数组拆分成多行,每一行都是顺序排列,即先存储第一行,再存储第二行,接着存储第三行。。。以此类推,直至存储完所有的二维数组。
动态数组
动态数组即为数组的长度并不是固定的,会根据存储的数据元素而改变的,动态数组的最好的体现我觉得是C++中的vector,它跟普通的数组类似,而且它还有可变长度的优点,都在STL标准模板库中有提现。
二、字符串
字符串的操作跟数组的操作是类似的。字符串同样可以进行定义和初始化操作,具体的实现跟数组的是一样的。因为字符串也是顺序存储结构,我们可以把他理解成是数据元素全部为字符类型的数组(字符数组),在C++里面,有专门的字符串数据类型(string,要包含头文件#include<string>)。
定义和初始化:
string s1 = "Hello World"; //定义和显示初始化
string s2 = s1; //复制初始化
string s3(s1); //括号复制初始化
字符串的比较:
直接进行比较:
(s1 == "Hello World")
(s1 == s2)
(s1 == s3)
使用compare函数进行比较:
s1.compare("Hello World")
s1.compare(s2)
s1.compare(s3)
字符串的长度也是可变的,而且可以使用加减运算符对字符串进行增减:
string s1="hello ";
string s2="world";
string s3=s2+s1; //s3=“hello world”
我所知道的比较好用的还有字符串专门的查找函数:find()和rfind()可以返回需要查找的字符在字符串中的索引。
int ret=s3.find('o'); //ret=4
其余的我了解的也没有多少高深的内容了,先写这么多,以后有所想再补。