• C++11 容器Array


    array是一个固定大小的顺序容器,不能动态改变大小,array内的元素在内存中以严格的线性顺序存储
    与普通数组声明存储空间大小[]的方式是一样有效的,只是加入了一些成员函数和全局函数[get (array)、operators (array)],以便当作标准容器使用
    零大小的array是有效的,但是不可以被成员函数front、back、data间接引用
    array的swap是一个线性操作交换所有的元素,通常是非常低效的
    Constructor:
    1.template < class T, size_t N > class array;

    举例:
    array<int,10> iArray={1,2,3,4,5,6,7,8,9,10};  
     
    Member functions:

    Iterators

    begin Return iterator to beginning
    end Return iterator to end
    rbegin Return reverse iterator to reverse beginning
    rend Return reverse iterator to reverse end
    cbegin Return const_iterator to beginning
    cend Return const_iterator to end
    crbegin Return const_reverse_iterator to reverse beginning
    crend Return const_reverse_iterator to reverse end
    std::array<int,5> arr = { 2, 16, 77, 34, 50 };  
    std::cout << "arr contains:";  
    for ( auto it = arr.cbegin(); it != arr.cend(); ++it )
    {
      *it = 34;    //error can't modify *it
      arr.begin();  //point to array first element
      arr.front();  //return the first element
      arr.back();   //return the end element
      std::cout << *it << std::endl;
    }

    Capacity

    empty Test whether list is empty
    size Return size
    max_size Return maximum size

    Element access

    operator[] Access element
    at Access element  
    front Access first element
    back Access last element
    data Get pointer to first data

     注意:使用at程序崩溃时不会显示堆栈信息,尽量使用[]去array的值


     
    back
    std::array<int,3> myarray = {5, 19, 77};  
    std::cout << "front is: " << myarray.front() << std::endl;   // 5  
    std::cout << "back is: " << myarray.back() << std::endl;     // 77  
    myarray.back() = 50;  
    for ( int& x : myarray ) 
      std::cout << " " << x; //5 19 50
    data//返回指向array中第一个元素的指针
    const char* cstr = "Test string";  
    std::array<char,12> charray;  
    std::memcpy (charray.data(),cstr,12);  
    std::cout << charray.data() << std::endl;//如果是char类型则打印值 Test string  
    //如果array中保存的是int  
    cout << iArray.data() << endl;//两者等效,等于打印出第一个元素的地址  
    cout << &charray << endl;  
    
    array<string,5> sArray={"hello","c++","I"};  
    for (auto it = sArray.cbegin(); it != sArray.cend(); ++it)  
    {  
       cout << *it << '	';//打印出hello  c++ I  
    }  
    cout << sArray.data() << endl;//打印地址  

    Modifiers

    fill Fill array with value
    swap Swap content
    fill
    std::array<int, 5> arr;
    arr.fill(34);
    for (auto it = arr.begin(); it != arr.end(); it++)
    {
        std::cout << " " << *it;
    }
    
    arr.assign(5);
    for (auto it = arr.begin(); it != arr.end(); it++)
    {
       std::cout << " " << *it;
    }

    OutPut:  

     34 34 34 34 34 5 5 5 5 5

    swap
    std::array<int,5> first = {10, 20, 30, 40, 50};  
    std::array<int,5> second = {11, 22, 33, 44, 55};  
    first.swap (second);  
    std::cout << "first:";  
    for (int& x : first) 
        std::cout << " " << x;  

    Global functions

    get(array) Get element (tuple interface) (function template ) 
    operators (array) Global relational operator functions for array

    get(array)//Returns a reference to the Ith element of array arr.

    函数原型:
    1.template <size_t I, class T, size_t N> T& get ( array<T,N>& arr ) noexcept;
    2.template <size_t I, class T, size_t N> T&& get ( array<T,N>&& arr ) noexcept;
    3.template <size_t I, class T, size_t N> const T& get ( const array<T,N>& arr ) noexcept;
     
    std::array<int,3> myarray = {10, 20, 30};  
    std::tuple<int,int,int> mytuple (10, 20, 30);  
    std::tuple_element<0,decltype(myarray)>::type myelement;  // int [decltype是新标准中用来取类型]  
    //array头文件中重载了tuple_element和tuple_size方便和tuple交互  
    //交换myarray[0]和myarray[2]  
    myelement = std::get<2>(myarray);//取出array中的30  
    std::get<2>(myarray) = std::get<0>(myarray);//把array中的10换成30  
    std::get<0>(myarray) = myelement;//把30赋值给第一个元素  
    std::cout << "first element in myarray: " << std::get<0>(myarray) << "
    ";  
    std::cout << "first element in mytuple: " << std::get<0>(mytuple) << "
    ";  
    Output:
    first element in myarray: 30
    first element in mytuple: 10

    operators(array)

    模板原型如下:
    
    1.template <class T, size_T N>
        bool operator== ( const array<T,N>& lhs, const array<T,N>& rhs );
    2.template <class T, size_T N>
        bool operator!= ( const array<T,N>& lhs, const array<T,N>& rhs );
    3.template <class T, size_T N>
        bool operator< ( const array<T,N>& lhs, const array<T,N>& rhs );
    4template <class T, size_T N>
       bool operator> ( const array<T,N>& lhs, const array<T,N>& rhs );
    5.template <class T, size_T N>
        bool operator<= ( const array<T,N>& lhs, const array<T,N>& rhs );
    6.template <class T, size_T N>
        bool operator>= ( const array<T,N>& lhs, const array<T,N>& rhs );
     
      std::array<int,5> a = {10, 20, 30, 40, 50};  
      std::array<int,5> b = {10, 20, 30, 40, 50};  
      std::array<int,5> c = {50, 40, 30, 20, 10};  
      if (a==b) std::cout << "a and b are equal
    ";  
      if (b!=c) std::cout << "b and c are not equal
    ";  
      if (b<c) std::cout << "b is less than c
    ";  
      if (c>b) std::cout << "c is greater than b
    ";  
      if (a<=b) std::cout << "a is less than or equal to b
    ";  
      if (a>=b) std::cout << "a is greater than or equal to b
    ";  
    Output:
    a and b are equal
    b and c are not equal
    b is less than c
    c is greater than b
    a is less than or equal to b
    a is greater than or equal to b
     
  • 相关阅读:
    定位服务器的性能
    关于tcp的keepalive
    写给future的话
    声音评测专用术语
    高效能人士必知铁律--note
    《如何高效学习》读书笔记
    如何快速接手一个系统?
    几个基础函数及特性
    最大的矩形(测试全对,为什么只有20分??)
    输入字符串(由0,1组成),编程计算其中连续0,1出现的最大次数
  • 原文地址:https://www.cnblogs.com/DswCnblog/p/5671799.html
Copyright © 2020-2023  润新知