一、数组
1、概念
基本形式如:int array[100],数组是最基本的数据结构,是固定大小的相同类型元素的顺序集合。存储在连续的内存地址中。
数组的特点:空间效率利用不高,因为数组需要预先设置大小;时间效率高,数组的每个下标对应一个元素,可以直接取用元素如a[10]表示数组a的下标为10的元素。
2、初始化
- 数组定义不初始化会被随机赋值,因此建议不要只定义不初始化。
- 数组初始化的几种形式:
(1)可以直接用{}:int a[10]={},就可以让a[10]数组中的所有元素全为0;
(2)也可以{}内包含0:int a[10]={},也可以让a[10]数组中的所有元素全为0;
(3){}内写一个值只会让第一个元素为这个值,后面的依旧是0:int a[3]={5},数组实际上被初始化为{5,0,0}数组初始化为某一固定值
- 可以将数组初始化为某一固定值。
(1)使用<string>(C++)或<string.h>(C)中的memset()函数,如:
memset(数组名,值,sizeof(数组名)),memset(a,1,sizeof(a)) //将a元素初始化为1。
(2)使用<algorithm>中的fill()函数,fill函数可以初始化容器和数组,如:
fill(begin(),end(),value),fill(a,a+10,5)//将a元素全部变为5。
- 显式初始化
int a1[3] = {1,2,3} //a1有三个元素分别初始化为1,2,3
int a2[] = {1,2,3} //a2有三个元素分别初始化为1,2,3
char b1[] = {'C','+','+'} //b1初始化,没有空字符
char b2[] = {'C','+','+','\0'} //b2初始化,有空字符'\0'
char b3[] = "C++" //b3初始化,结尾有空字符’\0'
string c[3] = {"hello","world"} //c初始化为“hello","world"," "
二、vector
1、概念
vector是STL标准库的一种容器,是一个类模板;是动态空间,随着元素的加入,会自动扩充空间非新元素,因此内存空间利用更加灵活,也不用像数组array一样指定初始大小。
vector特点:类模板,动态空间,不用指定初始大小,连续的内存地址;vector通常分配的空间比需求大,如果新元素加入导致空间不足,vector就会分配一块更大的内存空间用于存储(先考虑2倍,如果2倍还不够就会分配更大的内存空间),然后将原来的元素全部移动到新分配的更大存储空间,在释放原来的内存空间。(整个操作涉及:分配新内存|数据移动|释放旧内存复杂的操作)。
2、初始化
vector<T>v1 // 默认初始化
vector<T>v2(v1) // 相当于v2=v1
vector<T>v2=v1
vector<T>v3(n,val) // v3中含有n个值为val的元素
vector<T>v4(n) //v4中含有n个元素
vector<T>v5 = {a,b,c}
vector<T>v6{a,b,c}