线性表-数组
数组优点:
紧凑型连续存储,可以随机访问,可以通过数组索引快速找到对应元素,节约内存。
数组缺点:
数组连续存储,内存一次性分配,数组二次扩容,要重新分配内存空间,再把数据全部复制过去。
数组中间进行插入或删除,要搬移后面的所有数据保证存储的连续性。
C++数组、array和vector的区别
相同点
可以使用索引访问每一个元素,array和vector都针对下标运算符"[ ]"进行了重载。
都是用连续的内存,都可以随机访问,在array和vector底层都使用了数组。
不同点
- 数组和arry是定长容量,vector容器是变长容器。
- 数组只能下标访问,array和vectro可以用front()、back()和at()访问,避免arr[-1]访问越界的问题。
- 数组交换只能遍历,逐个元素交换,后两者有swap()机制。
- 数组容量获取sizeof()/strlen(),后两者size()和Empty()。
- 内存使用,数组用new[ ]/malloc申请空间,必须用delete[ ]和free释放。后两者在声明周期完成后,会自动释放其所占用的空间。
C++数组和链表的区别
数组连续存储,可以随机访问,通过索引快速找到元素,节约内存。链表存储不连续,通过指针指向下一个元素的地址。
数组有关操作
数组是一种相同类型元素的集合
#include <iostream>
using namespace std;
#include <string>
int num1 = 5;
int const num2 = 10;
int main()
{
//int arr0[num1] = {}; //错误代码
int arr0[] = {1,2,3,4,5,6};
int arr1[num2] = { 1,2,3,4,5 };
int arr2[10] = { 1,2,3,4,5 };
char arr3[5] = "ab"; //数组arr3有3个元素,'a','b','\0'
int arr4[num2][num2] = { 1,2,3,4,5,6,7,8,9 ,10,11,12};
//二维数组定义时,列不能省略,在内存中一行一行连续存放
cout << sizeof(arr1) << endl;
cout << strlen(arr3) << endl;
//计算数组大小
int sz = sizeof(arr0)/sizeof(arr0[0]);
//打印首元素
cout<<*arr0<<endl;
//遍历数组
for (int row = 0; row < num2; row++)
{
for (int col = 0; col < num2; col++)
{
cout << arr4[row][col]<<" ";
}
cout << endl;
}
//内存分配
int* arr = new int [5];
for (int i = 0; i < 5; i++)
{
arr[i] = i;
cout << arr[i] << endl;
}
delete[] arr;
system("pause");
return 0;
}
定义数组时,数组长度应为常量表达式,不可以为变量。
数组名为首元素地址,arr等价于&arr[0];整个数组地址&arr