一、简述
我们知道,数组不能够进行整体赋值,即不能直接用赋值语句将数组 a2 的内容赋给数组 a1(a1 = a2),只能逐元素复制数据,而C++中,vector 和 array 却可以。
二、详细说明
-
vector
****包含于头文件<vector>
创建语法:
①vector<type_Name> name(n_name);
其中,后面括号中的 n_name 代表 type_Name 型元素的个数,可以是常量,也可以是变量。
②vector<type_Name> name;
和上面不同的是,后面没有括号,此时表示 type_Name 型元素的个数为 0 。 -
array
****包含于头文件<array>
创建语法:array<type_Name,n_name> name;
其中,n_name 代表 type_Name 型元素的个数,且必须是常量。 -
二者的访问方法
vector 与 array 可使用标准的数组表示方法对元素进行访问,即 数组名[下标]。
三、示例
#include<iostream>
#include<array> //C++11
#include<vector> //STL C++98
using namespace std;
int main()
{
double a1[4] = { 1.2,2.4,3.6,4.8 }; //C,C++
vector<double> a2(4); //C++98 STL vector 自动调整长度
//在 C98 初始化不简单
a2[0] = 1.0 / 3.0;
a2[1] = 1.0 / 5.0;
a2[2] = 1.0 / 7.0;
a2[3] = 1.0 / 9.0;
//C++11 创建和初始化 array
array<double, 4> a3 = { 3.14,2.72,1.62,1.41 }; //array 长度固定
array<double, 4> a4;
a4 = a3; //array对象可以直接复制全部元素数据,而数组只能主元素复制数据
//使用 array 符号
cout << "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;
//不端行为
a1[-2] = 20.2; //将被转换为 *(a1 - 20) = 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;
return 0;
}