数组的替代品——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;
    //vector对象存储在自由存储区或者堆中

    array<double, 4> a3 = {3.14, 2.72, 1.62, 1.41};
    //声明array对象的基本格式:array<typeName,n_elem> arr;
    //与数组一样,array的长度是固定的,使用栈,n_elem不能时变量;
    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;
    cout << "a1[-2]: " << a1[-2] << " at " << &a1[-2] << endl;
    //索引是-2的意思是:可以将a1[-2]转化成*(a1-2),找到a1指向的位置,向前移两个double元素,
    //并将20.2存储在目的地,也就是把数组存储在数组外面。c++不检查这种越界错误,所以数组不安全。
    //使用vector和array可以选择让它们禁止这种错误,使用成员函数at()
    a2.at(1) = 2.3;//当使用成员函数at(),将在运行期间捕获非法索引,而程序默认将中断,所以这种额外检查的代价是运行时间长.

    cout << "a3[2]: " << a3[2] << " at " << &a3[2] << endl;
    cout << "a4[2]: " << a4[2] << " at " << &a4[2] <<endl;
    for(int i = 0;i<4;++i)
    {
        cout << a3[i] << endl;
    }
    for(int i = 0;i<4;++i)
    {
        cout << a4[i] << endl;
    }
    return 0;
}
a1[2]: 3.6 at 0x61fd20
a2[2]: 0.142857 at 0x7a1c40
a3[2]: 1.62 at 0x61fce0
a4[2]: 1.62 at 0x61fcc0
a1[-2]: 20.2 at 0x61fd00
a3[2]: 1.62 at 0x61fce0
a4[2]: 1.62 at 0x61fcc0
3.14
2.72
1.62
1.41
3.14
2.72
1.62
1.41

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值