《白话C++》第10章 Page119 常用容器 10.6.1 std::array

10.6.1  std::array

建议先复习《语言》篇中“STL常用类型”中和 std::array 相关的内容。

boost::scope_array 更多地用于对C++程序采用在堆中分配的原生数组来实现自动管理(重点就是在超出生存区时,自动释放)。

std::vector 提供对连续内存的更多管理,包括分配,扩大,缩小(逻辑上);另外 std::vector 是一个标准的“容器”,提供了对应的迭代器类型。

如果不需要在程序运行时才动态决定数组大小,更不需要在程序运行时改变数组容量大小,那么,我们要的是一个最简单的栈数组:

//写代码时,编译时就决定这个数组是10个元素
int a[10];

std::array  就用来代替普通栈数组。

栈数组有个特性,叫“数组退化”。

std::array的例子:

#include <array>

void test_boost_array()
{
    std::array<int, 10> i10a;
    std::cout << i10a.size() << endl; //10
//    std::cout << std::array<int, 10>::size() << endl;
}

std::array是一个严格的静态数组,而size()则是类型的静态成员。std::array可以方便地使用[ ]和下标,随机访问每个元素:

for(int i    = 0; i < 10; i++)
{
    i10a[i] = 10 + i;
}

也可以用迭代器访问:

typedef std::array<int, 10> IArray10;
for(IArray10::const_iterator it= i10a.begin()
                    ; it != i10a.end(); ++ it)
{
    cout << *it << "\t";
}

类似vector的at(index)函数也存在,并且同样附加了越界检查功能,越界时将抛出异常。

std::array也提供了empty() 函数, 同样静态成员:

static bool empty();

除非我们一开始定义的是一个大小为0的 array 对象,否则通过 std::array 对象调用empty(),总是返回 false,它的存在只是为了让  std::array  可以更好地参与标准库的基于容器的算法。 

高效低耗啊! std::array 看着远处舞台上风光的 std::vector,心里暗自说:“人们都说我在模仿他,其实我要做一个和它不同的数组!”

std::array还提供了front()和back()两个函数,方便得到数组的最前头元素和最后头的元素。再加上size(),empty()等操作,array 比 vector 高效,比原生数组安全和方便,做C++语言中有个性的数组类型,它做到了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值