关于数组,vector和array三者的用法和区别
首先:首先模板类vectorhearray是数组的替代品
模板类是一种动态数组,可以在运行阶段设置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可以是变量
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 请按任意键继续. . .