2. 数组的替代品

模板类 vector 和 array 都是数组的“替代品”。

vector

模板类 vector 类似于 string 类,也是一种动态数组。
可以在运行阶段设置 vector 对象的长度,可以在末尾添加新数据,还可以在中间插入新数据。基本上,它是使用 new 创建动态数组的替代品。实际上,vector 类确实是用 new 和 delete 管理内存的,但这个工作是自动完成的。

这里只是简单介绍一下如何使用 vector。首先,要使用 vector 对象,必须包含头文件 vector。其次,vector 包含在名称空间 std 中,因此您可以使用 using 编译指令,using 声明或者 std::vector。第三,模板使用不同的语法来指出它存储的数据类型。第四,vector 类使用不同的语法来指定元素数。

#include <vector>
#include <iostream>
using namespace std;
int main()
{
    vector<int> vi;
    int n;
    cin >> n;
    vector<double> vd(n);
}

下面的声明创建一个 vector 对象,它可以存储 n_elem 个类型为 typeName 的元素:

vector<typeName> varName(n_elem);

array

vector 类的功能比数组强大,但付出的代价就是效率稍低。如果您需要的是长度固定的数组,使用数组是最佳的选择,但代价是不那么方便和安全。有鉴于此,C++11 新增了模板类 array,它也位于名称空间 std 中。与数组一样,array 对象的长度也是固定的,也使用栈,而不是堆,因此其效率与数组相同,但更安全、方便。

#include <array>
using namespace std;
int main()
{
    array<int, 10> arr = {1, 3, 4};
    return 0;
}

声明 array 的通用格式:

array<typeName, n_elem> varName;

和声明 vector 对象不同,n_elem 不能是变量。

在 C++11 中可以将列表初始化用于 vector 和 array 对象,但在 C++98 中,不能对 vector 这样做。

和数组的比较

首先,无论是数组、vector 对象还是 array 对象都可以使用标准数组表示法来访问各个元素。
其次,array 对象和数组存储在栈中,而 vector 存放在堆中。
第三,可以将一个 array 对象赋值给另一个 array 对象,而数组不可以。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值