win10建站wordpress,商城网站结算页面怎么做,网站空间和数据库的关系,外贸网站要怎么做目录
1.模板类vector
2.模板类array#xff08;C11#xff09;
3.比较数组、vector对象和array对象 模板类vector和array是数组的替代品。
1.模板类vector
模板类vector类似于string类#xff0c;也是一种动态数组。您可以在运行阶段设置vector对象的长度#xff0c;可…目录
1.模板类vector
2.模板类arrayC11
3.比较数组、vector对象和array对象 模板类vector和array是数组的替代品。
1.模板类vector
模板类vector类似于string类也是一种动态数组。您可以在运行阶段设置vector对象的长度可在末尾附加新数据还可以中间插入新数据。基本上它是使用new创建动态数组的替代品。实际上vector类确实使用new和delete来管理内存但这种工作是自动完成的。
这里介绍一些基本的实用知识首先要使用vector对象必须包含头文件vector。其次vector包含在名称空间std中因此您可以使用using编译指令、using声明或std::vector。第三模板使用不同的语法来指出它存储的数据类型。第四vector类使用不同的语法来指定元素数。
下面举例
#includevector
...
using namespace std;
vectorint vi;//create a zero-size array of int
int n;
cin n;
vectordouble vd(n);//create an array of n double
其中vi是一个vectorint对象vd是一个vectordouble对象。由于vector对象在您插入或添加值时自动调整长度因此可以将vi的初始长度设置为0.但要调整长度需要使用vector包中的各种方法。
一般下面的声明创建一个名为vt的vector对象它可存储n_elem个类型为typeName的元素
vectortypeName vt(n_elem);
其中n_elem可以是整型常量也可以是整型变量。
vector类的功能比数组强大但付出的代价是效率稍低。如果需要的是长度固定的数组使用数组是更佳的选择但代价是不那么方便和安全。
2.模板类arrayC11
array对象的长度是固定的也使用栈静态内存分配而不是自由存储区因此其效率与数组相同但更方便更安全。
要创建array对象需要包含头文件array。
#includearray
...
using namespace std;
arrayint,5 ai;//create array object of 5 ints
arraydouble,4 ad {1.2,2.1,3.43,4.3};
下面的声明创建一个名为arr的array对象它包含n_elem个类型为typeName的元素
arraytypeName,n_elem arr;
与创建vector对象不同的是n_elem不能是变量。
3.比较数组、vector对象和array对象
//4.24
#if 1
#includeiostream
#includevector //STL C98
#includearray //C11
using namespace std;int main()
{//C,original Cdouble a1[4] { 1.2, 2.4, 3.6, 4.8 };//STL C98vectordouble a2(4);//no simple way to initialize in C98a2[0] 1.0 / 3.0;a2[1] 1.0 / 5.0;a2[2] 1.0 / 7.0;a2[3] 1.0 / 9.0;//C11 - create and initialize array objectarraydouble, 4 a3 { 3.14, 2.72, 1.62, 1.41 };arraydouble, 4 a4;a4 a3;//valid for array objects of same size//use array notationcout a1[2]: a1[2] at a1[2] endl;cout a2[2]: a2[2] at a2[2] endl;cout a3[2]: a3[2] at a3[2] endl;cout a4[2]: a4[2] at a4[2] endl;//misdeeda1[-2] 20.2;//含义为找到a1指向的地方向前移两个double元素并将20.2存储到目的地。也就是说将信息存储到数组的外面。cout a1[-2]: a1[-2] at a1[-2] endl;cout a3[2]: a3[2] at a3[2] endl;cout a4[2]: a4[2] at a4[2] endl;system(pause);return 0;
}
#endif
可以发现从地址看array对象和数组存储在相同的内存区域栈中而vector对象存储在另一个区域自由存储区或堆中可以将一个array对象赋给另一个array对象而数组必须逐个元素复制数据。