C++标准库源码分析之 array

本文详细分析了C++标准库中的array容器,基于内置数组实现,提供随机访问迭代器。涵盖了array的基本操作,包括成员函数如begin、end等,并探讨了其内部结构和非成员函数支持的操作,如size、empty等。
摘要由CSDN通过智能技术生成

array

  • 本文代码根据 GNU ISO C++ Library 所含库文件整理,同时参考了 Microsoft Visual Studio Community 2017 版本 15.8.4 的库文件源代码
  • 本文暂时略去了源文件中的异常处理代码
  • 本文暂时略去了源文件中 arraytuple 的支持

array 概述

  • 用于存储固定数量元素序列的标准容器
  • 以内置数组为基础实现
  • 支持随机访问迭代器
  • array 提供的接口(成员函数)
    • 迭代器:begin(), end(), cbegin(), cend(), rbegin(), rend(), crbegin(), crend()
    • size(), max_size(), empty()
    • operator[], at(), front(), back()
    • data()
    • fill(), swap()
  • array 支持的操作(非成员函数)
    • operator==, operator!=, operator<, operator<=, operator>, operator>=
    • swap()
    • get()

array 的基础实现

// 数组 T[N]
template <typename T, size_t N>
struct __array_traits
{
   
  typedef T Type[N];

  static constexpr T& S_ref(const Type& t, size_t n) {
    return const_cast<T&>(t[n]); }
  static constexpr T* S_ptr(const Type& t) {
    return const_cast<T*>(t); }
};

// 类模板部分特例化,处理空数组
template <typename T>
struct __array_traits<T, 0>
{
   
  struct Type {
    };

  static constexpr T& S_ref(const Type&, size_t) {
    return *static_cast<T*>(nullptr); }
  static constexpr T* S_ptr(const Type&) {
    return nullptr; }
};

array 的内部结构

template <typename T, size_t N>
struct array {
   
  // 类型成员
  using value_type      = T;
  using pointer         = T * ;
  using const_pointer   = const T*;
  using reference       = T & ;
  using const_reference = const T&;
  using iterator        = T * ;         // array 的迭代器即普通指针
  using const_iterator  = const T*;

  using size_type              = std::size_t;
  using difference_type        
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值