比较数组,vector对象和array对象

    技术2022-07-11  75

    要了解数组,vector对象及array对象的相似与不同之处,结合以下示例分析:

    #include <iostream> #include <vector> #include <array> int main() { using namespace std; double a1[4] = {1.2,2.4,3.6,4.8}; vector<double> a2(4); a2[0] = 1.0/3.0; a2[1] = 1.0/5.0; a2[2] = 1.0/7.0; a2[3] = 1.0/9.0; array<double,4> a3 ={3.14,2.72,1.62,1.41}; array<double,4> a4; a4 = a3; 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; 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; }

    输出结果:

    a1[2] :3.6 at 0x28cce8 a2[2] :0.142857 at 0xca0328 a3[2] :1.62 at 0x28ccc8 a4[2] :1.62 at 0x28cca8 a1[-2] :20.2 at 0x28ccc8 a3[2] :20.2 at 0x28ccc8 a4[2] :1.62 at 0x28cca8

    输出结果可知:

    无论是数组,vector对象还是array对象,都可用标准数组表示法来访问各个元素。其中,从地址可知,array对象和数组存储在相同的内存区域栈中,而vector对象存储在自由存储区或堆中。第三,可以将array对象赋给另一个array对象,而对于数组,须逐个元素复制数据。 对于a1[-2] = 20.2;等价于对a1数组的首元素地址a[0]再往前前移两个double元素,从而数组越界。与C语言一样,C++也不检查这种越界错误。

    Processed: 0.023, SQL: 9