zoukankan      html  css  js  c++  java
  • 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[]().

  • 相关阅读:
    C# 读取JSON
    checkbox与说明文字无法对齐的问题
    C#判断一个string是否为数字
    C# 调用系统winmm.dll 播放音乐wav mp3
    C#导出EXCEL的几种方法
    C#遍历DataSet中数据的几种方法总结
    cookie 简单用法
    JQGrid 在页面加载时展开SubGrid
    Echarts 设置地图上文字大小及颜色
    Echarts 地图上显示数值
  • 原文地址:https://www.cnblogs.com/jingyg/p/6774632.html
Copyright © 2011-2022 走看看