vector和数组(使用[]定义)有以下关系和区别
一、关系
存储数据:
两者都可以用来存储一组相同类型的数据。例如,可以用数组存储一组整数
int arr[5]
,也可以用vector<int> v
存储一组整数。
访问元素:
都支持通过下标访问元素,例如
arr[2]
和v[2]
都可以访问相应集合中的第三个元素(下标从 0 开始)。
二、区别
内存管理:
数组:在定义时必须指定大小,且大小固定,不能动态改变。一旦分配内存,大小就不能再改变。如果需要更多的空间,必须手动重新分配和复制数据。
vector
:可以动态地添加和删除元素,自动管理内存。当需要更多空间时,会自动分配更大的内存块,并将现有元素复制到新的内存区域。
安全性:
数组:不进行边界检查,当下标超出范围时可能导致未定义行为,如访问非法内存地址,可能导致程序崩溃。
vector
:进行边界检查,通过at()
成员函数访问元素时,如果下标越界会抛出异常,相对更安全。
初始化方式:
数组:可以使用初始化列表进行初始化,例如
int arr[] = {1, 2, 3}
。也可以不初始化,此时数组中的元素的值是未定义的。vector
:可以使用多种方式初始化,例如vector<int> v = {1, 2, 3}
,或者先创建空的vector
,然后再使用push_back()
等函数添加元素。
函数参数传递:
数组:在作为函数参数传递时,实际上传递的是指针,函数内部无法知道数组的实际大小,容易导致错误。
vector
:作为函数参数传递时,是按值传递或者引用传递,函数内部可以准确知道vector
的大小和内容。
容器操作:
vector
是标准模板库(STL)中的容器,提供了很多方便的成员函数,如push_back
、pop_back
、size
、clear
等,用于添加、删除元素和获取容器的状态信息。数组没有这些内置的操作函数。
Last updated