2、C++数据结构与算法-数组

文章探讨了C++中数组、array和vector的异同,包括它们的内存管理、访问方式和容量变化。数组提供紧凑存储和随机访问,但插入删除效率低;vector是动态数组,支持便捷增长,但有内存重分配开销。同时,文章还对比了数组与链表的存储结构和访问效率。
摘要由CSDN通过智能技术生成

线性表-数组

数组优点:
紧凑型连续存储,可以随机访问,可以通过数组索引快速找到对应元素,节约内存。
数组缺点:
数组连续存储,内存一次性分配,数组二次扩容,要重新分配内存空间,再把数据全部复制过去。
数组中间进行插入或删除,要搬移后面的所有数据保证存储的连续性。

C++数组、array和vector的区别

相同点
可以使用索引访问每一个元素,array和vector都针对下标运算符"[ ]"进行了重载。
都是用连续的内存,都可以随机访问,在array和vector底层都使用了数组。

不同点

  1. 数组和arry是定长容量,vector容器是变长容器。
  2. 数组只能下标访问,array和vectro可以用front()、back()和at()访问,避免arr[-1]访问越界的问题。
  3. 数组交换只能遍历,逐个元素交换,后两者有swap()机制。
  4. 数组容量获取sizeof()/strlen(),后两者size()和Empty()。
  5. 内存使用,数组用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值