数据结构与算法 | 数组与vector

一、数组

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}

 

猜你喜欢

转载自blog.csdn.net/qq_39930643/article/details/87861233