array 数组的特性:
- 在内存中是以连续地址存放的, 并且存放的内容具有相同的数据类型;
- 数组下标是从0开始;
根据 属性1, 对数组进行删除和 增加元素时, 需要移动其他元素; (而所谓的删除,是通过后序元素往前移动,覆盖待删除的元素实现的;)
属性2, 在数组中根据下标查找元素时, 时间复杂度
O
(
1
)
O(1)
O(1);
c ++ 中声明一个数组, 需要指定数组中存储的数据类型,以及数据的大小数量:
int arr1[10]:
声明一个整型的数组, 数组的大小为10;
注意, c++ 中 vector 和 array 的区别:
vector 是容器, 它的底层实现使用了数组 array;
#include
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非常类似,两者的唯一差别就是对于空间运
用的灵活性;
-
array占用的是静态空间,一旦配置了就不可以改变大小,如果遇到空间不足的情况还要自行创建更大的空间,并手动将数据拷贝到新的空间中,再把原来的空间释放。
-
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 nums;
// nums 是一个vector 类型的容器,
// 代表是一个长度大小可变的动态数组, 容器中存放的数据类型是 int 型;
vector nums(N) // 指定该nums 的大小为 N;
vector nums:
//nums是一个容器变量,容器名称为vector,容器内存的数据为int型;
int& nums // nums 是一个引用, 引用的对象数据类型是整型;
vector& nums:
//nums为一个引用变量,引用的目标属性是 int型 vector容器;
2.2.1 vector 初始化;
一维情况:
以int 类型数据举例
- 给定数组长度 N, 以及 数组中元素的初始值为默认值0
vector<int> data(N)
N 为默认数组长度, 默认初始值为0;
- 默认数组长度为N, 默认初始值为 Value
vector<int> data(N, value)
- 直接给定数据
vector<int> data = {1,2, 3, 4, 5};
- 动态改变长度
调用 vector 中resize();
二维情况:
- 设置数组长度的默认初始
vector<vector<int>> data(N1, vector<int>(N2));
N1为行,N2为列,默认值为0
- 设置数组长度的给定初始值
vector<vector<int>> data(N1, vector<int>(N2,value));
N1为行,N2为列,默认值为value;
- 直接给定数据(以初始一个2X5的数组为例)
vector<int> data = {{1,2,3,4,5},{6,7,8,9,10}}
- 动态改变长度(主要调用vector 中的resize()函数)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)