ch1_1 c++中的 数组array 与 容器vector

1. 数组 array

1.1 数组的属性

array 数组的特性:

  1. 在内存中是以连续地址存放的, 并且存放的内容具有相同的数据类型;
  2. 数组下标是从0开始;

根据 属性1, 对数组进行删除和 增加元素时, 需要移动其他元素; (而所谓的删除,是通过后序元素往前移动,覆盖待删除的元素实现的;)
属性2, 在数组中根据下标查找元素时, 时间复杂度 O ( 1 ) O(1) O(1);

1.2 c++ 中的数组 array

c ++ 中声明一个数组, 需要指定数组中存储的数据类型,以及数据的大小数量:

int arr1[10]:
声明一个整型的数组, 数组的大小为10;

注意, c++ 中 vector 和 array 的区别:
vector 是容器, 它的底层实现使用了数组 array;

1.3 c++ 中的array的初始化

#include<iostrem>
using nameapace std;
int main()
{
//数组的定义三种方式
	int numpy[5];//第一种
	int numpy1[5] = { 0,1,2,3,4 };
	//第二种(如果没有全部填写完,会用0进行填补)
	//大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。
	float numpy2[] = { 0.23,0.56 };//第三种 如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数
	numpy[0] = 52;//为数组中某个元素赋值的实例:


	cout << numpy[0] << endl;
	cout << numpy2[1] << endl;
	for (int i = 0; i < 5; i++)
	{
		cout << numpy1[i] << endl;
	}	
	system("pause");
	return 0;
}

2. 容器之 vector

容器的类型有多种, 常见的有array, vector, deque, forward_list(单向链表), list(双向链表), stack, queue(队列), priority_que, set;

vector 表示可以改变大小的数组的序列容器,
可以简单的认为, 向量是一个能够存放任意类型的动态数组;

向量vector 是一个封装了 动态大小的数组的;

2.1 vector的实现机理

vector是一种序列式容器,其数据安排以及操作方式与array非常类似,两者的唯一差别就是对于空间运
用的灵活性;

  1. array占用的是静态空间,一旦配置了就不可以改变大小,如果遇到空间不足的情况还要自行创建更大的空间,并手动将数据拷贝到新的空间中,再把原来的空间释放。

  2. vector则使用灵活的动态空间配置,维护一块连续的线性空间,在空间不足时,可以自动扩展空间容纳新元素,做到
    按需供给。其在扩充空间的过程中仍然需要经历:重新配置空间,移动数据,释放原空间等操作。

这里需要说明一下动态扩容的规则:以原大小的两倍配置另外一块较大的空间(或者旧长度+新增元素的个
数),源码:

const size_type  len = old_size + max(old_size, n);

Vector扩容倍数与平台有关,在Win + VS 下是 1.5倍,在 Linux + GCC 下是 2 倍

2.2 vector 的声明与初始化

2.2.1 vector 声明;
vector<int>  nums; 
 //  nums 是一个vector 类型的容器,
 // 代表是一个长度大小可变的动态数组,  容器中存放的数据类型是 int 型; 

vector<int>  nums(N)  // 指定该nums 的大小为 N;

vector<int> nums: 
//nums是一个容器变量,容器名称为vector,容器内存的数据为int型;

int& nums //  nums 是一个引用,  引用的对象数据类型是整型;

vector<int>& nums:
//nums为一个引用变量,引用的目标属性是 int型 vector容器;
2.2.1 vector 初始化;

一维情况:
以int 类型数据举例

  1. 给定数组长度 N, 以及 数组中元素的初始值为默认值0
vector<int> data(N)
N 为默认数组长度, 默认初始值为0
  1. 默认数组长度为N, 默认初始值为 Value
vector<int> data(N, value)

  1. 直接给定数据
vector<int> data = {1,2345}
  1. 动态改变长度
    调用 vector 中resize();

二维情况:


  1. 设置数组长度的默认初始

vector<vector<int>> data(N1, vector<int>(N2));
N1为行,N2为列,默认值为0
  1. 设置数组长度的给定初始值
vector<vector<int>> data(N1, vector<int>(N2,value));
N1为行,N2为列,默认值为value;

  1. 直接给定数据(以初始一个2X5的数组为例)
vector<int> data = {{1,2,3,4,5},{6,7,8,9,10}}
  1. 动态改变长度(主要调用vector 中的resize()函数)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值