• std::array中的std::get<n>()


    模板函数std::get<n>()是一个辅助函数,它能够获取到容器的第 n 个元素。模板参数的实参必须是一个在编译时可以确定的常量表达式,编译时会对它检查。

    get<n>()模板提供了一种不需要在运行时检查,但能用安全的索引值访问元素的方法。

    在std::array中,提供了2种访问元素的方法:[]和at()

    1 #include <iostream>
    2 #include <array>
    3 
    4 int main()
    5 {
    6     std::array<int, 5> arr {1, 2, 3, 4, 5};
    7     std::cout << "5th element is : " << arr[5] << std::endl;
    8     return 0;
    9 }

    []不会检查索引值是否越界,一旦越界将会有未定义的结果(crash或未知的值)

    1 #include <iostream>
    2 #include <array>
    3 
    4 int main()
    5 {
    6     std::array<int, 5> arr {1, 2, 3, 4, 5};
    7     std::cout << "5th element is : " << arr.at(5) << std::endl;
    8     return 0;
    9 }

    at()会检查,一旦越界,将抛出std::out_of_range的异常

    terminate called after throwing an instance of 'std::out_of_range'
      what():  array::at: __n (which is 5) >= _Nm (which is 5)
    Aborted (core dumped)

    注:实际上,在头文件 <array> 中,通过重载全局函数 std::get 使得通过 std::get 访问 array 中的元素时,array 容器就像一个多元组。

    template<size_t I, class T, size_t N >

    T& get( array<T,N>& a );
    (1)  (C++11 起)

    template<size_t I, class T, size_t N >

    T&& get( array<T,N>&& a );
    (2) (C++11 起)

    template<size_t I, class T, size_t N >

    const T& get( const array<T,N>& a ); 
    (3) (C++11 起)

    从数组中提取Ithelement元素.

    I[0, N)范围内的值必须是一个整数。这是在编译时执行,而不是at()或operator[]().

  • 相关阅读:
    Elasticsearch (二) 索引
    Elasticsearch (一)搭建与启动
    IDEA 插件
    IDEA 导入华丽的皮肤
    Tomcat https 访问
    oracle系统视图SQL语句整理
    Java内存优化和性能优化的几点建议
    Tomcat配置SSL证书
    sublime集成MinGW,打造C/C++开发环境
    一个简单的Vue.js组件开发示例
  • 原文地址:https://www.cnblogs.com/jingyg/p/6774632.html
Copyright © 2020-2023  润新知