std::array

8 篇文章 0 订阅

成员函数

Iterators

//函数签名:
// iterator begin() noexcept;
// iterator end() noexcept;
#include<iostream>
#include<array>
using namespace std;
int main()
{
    array<int, 5> my_array = { 2,4,8,7,11 };
    for (auto it = my_array.begin(); it != my_array.end(); it++)
        cout << *it << " ";
    return 0;
}

输出:
2 4 8 7 11
PS:如果array为空,begin()返回值与end()一样

//函数签名:
//reverse_iterator rbegin() noexcept;
//reverse_iterator rend() noexcept;
#include<iostream>
#include<array>
using namespace std;
int main()
{
    array<int, 5> my_array = { 2,4,8,7,11 };
    for (auto it = my_array.rbegin(); it != my_array.rend(); it++)
        cout << *it << " ";
    return 0;
}

输出:
11 7 8 4 2

//函数签名:
//const_iterator cbegin() const noexcept;
//const_iterator cend() const noexcpet;
#include<iostream>
#include<array>
using namespace std;
int main()
{
    array<int, 5> my_array = { 2,4,8,7,11 };
    for (auto it = my_array.cbegin(); it != my_array.cend(); it++)
        cout << *it << " ";
    return 0;
}

输出:
2 4 8 7 11

//函数签名:
//const_iterator crbegin() const noexcept;
//const_iterator crend() const noexcept;
#include<iostream>
#include<array>
using namespace std;
int main()
{
    array<int, 5> my_array = { 2,4,8,7,11 };
    for (auto it = my_array.crbegin(); it != my_array.crend(); it++)
        cout << *it << " ";
    return 0;
}

输出:
11 7 8 4 2

Capacity

//函数签名
//constexpr size_type size() noexcept;
#include<iostream>
#include<array>
using namespace std;
int main()
{
array<int, 5> my_ints;
array<char, 5> my_chars;
cout << my_ints.size() << endl;
cout << sizeof(my_ints) << endl;
cout << my_chars.size() << endl;
cout << sizeof(my_chars) << endl;
  return 0;
}

输出:
5
20 5*4(int的字节大小)
5
5 5*1(char的字节大小)
PS:size() 总是等于第二个用来实例化模板的参数

//函数签名
//constexpr size_type max_size() noexcept;
#include<iostream>
#include<array>
using namespace std;
int main()
{
    array<int, 5> my_ints;
    cout << my_ints.size() << endl;
    cout << my_ints.max_size() << endl;
  return 0;
}

输出:
5
5

//函数签名
//constexpr bool empty() noexcept;
#include<iostream>
#include<array>
using namespace std;
int main()
{
array<int, 0> first_array;
array<int, 10> second_array;
cout << first_array.empty() << endl;
cout << second_array.empty() << endl;
return 0;
}

输出:
1
0

Element access

//函数签名
//reference operator[] (size_type n);
#include<iostream>
#include<array>
using namespace std;
int main()
{
    array<int, 10> my_array;
    for (unsigned int i = 0; i != 10; i++)
        my_array[i] = i;
    for (unsigned int i = 0; i != 10; i++)
        cout << my_array[i]<<" ";
    cout << endl;
    return 0;
}

输出:
0 1 2 3 4 5 6 7 8 9

//函数签名
//reference at ( size_type n );
#include<iostream>
#include<array>
using namespace std;
int main()
{
array<int, 10> my_array;
for (unsigned int i = 0; i != 10; i++)
my_array[i] = i+1;
for (unsigned int i = 0; i != 10; i++)
cout << my_array.at(i) << " ";
cout << endl;
return 0;
}

输出:
1 2 3 4 5 6 7 8 9 10

//函数签名
//reference front();
//reference back();
#include<iostream>
#include<array>
using namespace std;
int main()
{
    array<int, 3> my_array = { 0,8,11 };
    cout << my_array.front() << endl;
    cout << my_array.back() << endl;
    return 0;
}

输出:
0
11
PS:对空的array调用front()或者back()会造成未定义行为

//函数签名
// value_type* data() noexcept;
#include<cstring>
#include<iostream>
#include<array>
using namespace std;
int main()
{
    const char* str = "my string";
    // 注意这里是10 不是 9
    array<char, 10> char_array;
    memcpy(char_array.data(), str, 10);
    cout << char_array.data() << endl;
    return 0;
}

输出:
my string

Modifiers

//函数签名
// void fill (const value_type& val);
#include<iostream>
#include<array>
using namespace std;
int main()
{
    array<int, 8> my_array;
    my_array.fill(8);
    // 注意这里是10 不是 9
    for (int i = 0; i != my_array.size(); i++)
        cout << my_array[0] << " ";
    return 0;
}

输出:
8 8 8 8 8 8 8 8

//函数签名
// void swap (array& x) noexcept(noexcept(swap(declval<value_type&>(),declval<value_type&>())));
#include<iostream>
#include<array>
using namespace std;
int main()
{
    array<int, 3> my_array1 = { 1,2,3 };
    array<int, 3> my_array2 = { 3,2,1 };
    for (int i = 0; i != my_array1.size(); i++)
        cout << my_array1[i] << " ";
    cout << endl;
    for (int i = 0; i != my_array2.size(); i++)
        cout << my_array2[i] << " ";
    cout << endl;
    my_array1.swap(my_array2);
    for (int i = 0; i != my_array1.size(); i++)
        cout << my_array1[i] << " ";
    cout << endl;
    for (int i = 0; i != my_array2.size(); i++)
        cout << my_array2[i] << " ";
    cout << endl;
    return 0;
}

输出:
1 2 3
3 2 1
3 2 1
1 2 3
PS:交换的两个array必须包含相同的类型和大小,与其他容器的swap()不同,array的swap()只需要线性时间

非成员函数

//函数签名
//template <size_t I, class T, size_t N> T& get(array<T, N>& arr) noexcept;
//template <size_t I, class T, size_t N> T&& get(array<T, N>&& arr) noexcept;
//template <size_t I, class T, size_t N> const T& get(const array<T, N>& arr) noexcept;
#include<iostream>
#include<array>
#include<tuple>
using namespace std;
int main()
{
    array<int, 3> my_array = { 1,2,3 };
    tuple<int, int, int> my_tuple(1, 2, 3);

    tuple_element<0, decltype(my_array)>::type my_element;

    my_element = get<2>(my_array);
    get<2>(my_array) = get<0>(my_array);
    get<0>(my_array) = my_element;

    cout << get<0>(my_array) << endl;
    cout << get<0>(my_tuple) << endl;

    return 0;
}

输出:
3
1
PS:get()重载了tuple的同名函数

//函数签名
//(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);
//(4)
//template <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);
#include<iostream>
#include<array>
using namespace std;
int main()
{
    array<int, 3> a_array = { 1,2,3 };
    array<int, 3> b_array = { 1,2,3 };
    array<int, 3> c_array = { 3,2,1 };
    if (a_array == b_array)
        cout << "a_array and b_array are equal" << endl;
    if (b_array != c_array)
        cout << "a_array and b_array are not equal" << endl;
    if (b_array < c_array)
        cout << "b_array is less than c_array" << endl;
    if (c_array > b_array)
        cout << "c_array is greater than b_array" << endl;
    if (a_array <= b_array)
        cout << "a_array is less than or equal to b_array" << endl;
    if (a_array >= b_array)
        cout << "a_array is greater than or equal to b_array" << endl;
    return 0;
}

输出:
a_array and b_array are equal
a_array and b_array are not equal
b_array is less than c_array
c_array is greater than b_array
a_array is less than or equal to b_array
a_array is greater than or equal to b_array
PS:array重载了关系操作运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值