关于数组,vector和array三者的用法和区别
首先:首先模板类vectorhearray是数组的替代品
《1》模板类vector
模板类是一种动态数组,可以在运行阶段设置vector对象的长度,基本上,它是使用new创建动态数组的替代品。实际上,vector类确实是利用new和delete关键字来管理内存的,但是这种操作是自动完成。
使用vector类的注意事项:
1:必须包含头文件vector:即包含#include<vector>
2:模板使用不同的语法来指出它存储的数据类型
3:不能在声明vector类对象的时候,直接对其初始化
通常,下面的声明创建一个名称为vt的vector对象,它可以存储n_elem个类型为typeName的元素
vector<typeName>vt(n_elem); //n_elem可以是变量
《2》模板类array
vector类的功能比数组强大,但是效率低。如果需要长度固定的数组,使用数组是最佳选择,但是操作不是那么的方便和安全。鉴于此,C++11新增了模板类array,它也位于名称空间std中,与数组一样,array对象的的长度也是固定,也使用桟(属于静态内存分配)而不是自由存储区。因此效率与数组一样,但是更加方便安全。
使用array类的注意事项:
1:必须包含头文件array:即包含#include<array>
2:可以在声明array对象时直接对其初始化
一般情况,下面的声明创建一个名称为arr的array对象,它可以存储n_elem个类型为typeName的元素
vector<typeName,n_elem>arr; //n_elem可以是变量
《3》简单的示例程序:
/*
【1】 程序功能:详细讲解了------数组,vector,array三者的区别
【2】作者:李先生
【3】时间:2016,11,18
【4】地点:陕西师范大学
*/
#include<iostream>
#include<vector>
#include<array>
#include<Windows.h>
using namespace std;
int main()
{
int a1[4]={1,2,3,4};//【1】定义一个数组a1,初始化大小为4,并且赋初值
vector<int>a2(4);//【2】定义一个数组a2,存放整型数据,大小为4;利用Vector关键字定义的数组,不能直接初始化
a2[0]=5; //对数组a2各元素赋值
a2[1]=6;
a2[2]=7;
a2[3]=8;
array<int ,4>a3={9,10,11,12};//【3】用关键字array定义一个大小为4的整型数组a3,并初始化
array<int,4>a4;
a4=a3;
//无论是数组,vector对象还是array对象,都可以用标准数组表示法来访问每一个元素
cout<<"a1[1]= "<<a1[1]<<" 的内存地址"<<&a1[1]<<endl<<endl;
cout<<"a2[1]= "<<a2[1]<<" 的内存地址"<<&a2[1]<<endl<<endl;
cout<<"a3[1]= "<<a3[1]<<" 的内存地址"<<&a3[1]<<endl<<endl;
cout<<"a4[1]= "<<a4[1]<<" 的内存地址"<<&a4[1]<<endl<<endl;
//misdeed
a1[-1]=100;
cout<<"a1[-1]= "<<a1[-1]<<" 的内存地址"<<&a1[-1]<<endl<<endl;
cout<<"a3[1]= "<<a3[1]<<" 的内存地址"<<&a3[1]<<endl<<endl;
cout<<"a4[1]= "<<a4[1]<<" 的内存地址"<<&a4[1]<<endl<<endl;
system("pause");
return 0;
}
运行结果: 注:不同的编译器和编译时间显示的地址可能不同
a1[1]= 2 的内存地址010FFDC4
a2[1]= 6 的内存地址017C4B8C
a3[1]= 10 的内存地址010FFD90
a4[1]= 10 的内存地址010FFD78
a1[-1]= 100 的内存地址010FFDBC
a3[1]= 10 的内存地址010FFD90
a4[1]= 10 的内存地址010FFD78
请按任意键继续. . .