namespace boost {
template<typename T, std::size_t N> class array;
template<typename T, std::size_t N>
void swap(array<T, N>&, array<T, N>&);
template<typename T, std::size_t N>
constexpr bool operator==(const array<T, N>&, const array<T, N>&);
template<typename T, std::size_t N>
constexpr bool operator!=(const array<T, N>&, const array<T, N>&);
template<typename T, std::size_t N>
constexpr bool operator<(const array<T, N>&, const array<T, N>&);
template<typename T, std::size_t N>
constexpr bool operator>(const array<T, N>&, const array<T, N>&);
template<typename T, std::size_t N>
constexpr bool operator<=(const array<T, N>&, const array<T, N>&);
template<typename T, std::size_t N>
constexpr bool operator>=(const array<T, N>&, const array<T, N>&);
template<typename T, std::size_t N>
constexpr auto operator<=>(const array<T, N>&, const array<T, N>&);
template<std::size_t Idx, typename T, std::size_t N>
constexpr T& get(array<T, N>&) noexcept;
template<std::size_t Idx, typename T, std::size_t N>
constexpr const T& get(const array<T, N>&) noexcept;
template<class T, std::size_t N>
constexpr array<T, N> to_array( T const (&)[N] );
template<class T, std::size_t N>
constexpr array<T, N> to_array( T (&&)[N] );
template<class T, std::size_t N>
constexpr array<T, N> to_array( T const (&&)[N] );
}
Class template array
Synopsis
// In header: <boost/array.hpp>
template<typename T, std::size_t N>
class array {
public:
// types
typedef T value_type;
typedef T* iterator;
typedef const T* const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
typedef T& reference;
typedef const T& const_reference;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
// static constants
static const size_type static_size = N;
// construct/copy/destroy
template<typename U> array& operator=(const array<U, N>&);
// iterator support
constexpr iterator begin() noexcept;
constexpr const_iterator begin() const noexcept;
constexpr const_iterator cbegin() const noexcept;
constexpr iterator end() noexcept;
constexpr const_iterator end() const noexcept;
constexpr const_iterator cend() const noexcept;
// reverse iterator support
reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;
const_reverse_iterator crbegin() const noexcept;
reverse_iterator rend() noexcept;
const_reverse_iterator rend() const noexcept;
const_reverse_iterator crend() const noexcept;
// capacity
static constexpr size_type size() noexcept;
static constexpr bool empty() noexcept;
static constexpr size_type max_size() noexcept;
// element access
constexpr reference operator[](size_type);
constexpr const_reference operator[](size_type) const;
constexpr reference at(size_type);
constexpr const_reference at(size_type) const;
constexpr reference front();
constexpr const_reference front() const;
constexpr reference back();
constexpr const_reference back() const;
constexpr T* data() noexcept;
constexpr const T* data() const noexcept;
T* c_array() noexcept; // deprecated
// modifiers
swap(array<T, N>&);
constexpr void fill(const T&);
void assign(const T&); // deprecated
// public data members
T elems[N];
};
Construct/Copy/Destroy
template<typename U> array& operator=(const array<U, N>& other);
| Effects: |
For each |
Iterator Support
constexpr iterator begin() noexcept;
constexpr const_iterator begin() const noexcept;
constexpr const_iterator cbegin() const noexcept;
| Returns: |
|
constexpr iterator end() noexcept;
constexpr const_iterator end() const noexcept;
constexpr const_iterator cend() const noexcept;
| Returns: |
|
Reverse Iterator Support
reverse_iterator rbegin() noexcept;
| Returns: |
|
const_reverse_iterator rbegin() const noexcept;
const_reverse_iterator crbegin() const noexcept;
| Returns: |
|
reverse_iterator rend() noexcept;
| Returns: |
|
const_reverse_iterator rend() const noexcept;
const_reverse_iterator crend() const noexcept;
| Returns: |
|
Capacity
static constexpr size_type size() noexcept;
| Returns: |
|
static constexpr bool empty() noexcept;
| Returns: |
|
static constexpr size_type max_size() noexcept;
| Returns: |
|
Element Access
constexpr reference operator[](size_type i);
constexpr const_reference operator[](size_type i) const;
| Requires: |
|
| Returns: |
|
| Throws: |
Nothing. |
constexpr reference at(size_type i);
constexpr const_reference at(size_type i) const;
| Returns: |
|
| Throws: |
|
constexpr reference front();
constexpr const_reference front() const;
| Requires: |
|
| Returns: |
|
| Throws: |
Nothing. |
constexpr reference back();
constexpr const_reference back() const;
| Requires: |
|
| Returns: |
|
| Throws: |
Nothing. |
constexpr T* data() noexcept;
constexpr const T* data() const noexcept;
| Returns: |
|
T* c_array() noexcept; // deprecated
| Returns: |
|
| Remarks: |
This function is deprecated. Use |
Modifiers
void swap(array<T, N>& other);
| Effects: |
|
| Complexity: |
linear in |
void fill(const T& value);
| Effects: |
For each |
void assign(const T& value); // deprecated
| Effects: |
|
| Remarks: |
An obsolete and deprecated spelling of |
Specialized Algorithms
template<typename T, std::size_t N>
void swap(array<T, N>& x, array<T, N>& y);
| Effects: |
|
Comparisons
template<typename T, std::size_t N>
constexpr bool operator==(const array<T, N>& x, const array<T, N>& y);
| Returns: |
|
template<typename T, std::size_t N>
constexpr bool operator!=(const array<T, N>& x, const array<T, N>& y);
| Returns: |
|
template<typename T, std::size_t N>
constexpr bool operator<(const array<T, N>& x, const array<T, N>& y);
| Returns: |
|
template<typename T, std::size_t N>
constexpr bool operator>(const array<T, N>& x, const array<T, N>& y);
| Returns: |
|
template<typename T, std::size_t N>
constexpr bool operator<=(const array<T, N>& x, const array<T, N>& y);
| Returns: |
|
template<typename T, std::size_t N>
constexpr bool operator>=(const array<T, N>& x, const array<T, N>& y);
| Returns: |
|
template<typename T, std::size_t N>
constexpr auto operator<=>(const array<T, N>& x, const array<T, N>& y)
-> decltype(x[0] <=> y[0]);
| Effects: |
For each |
| Remarks: |
When |
Specializations
template<std::size_t Idx, typename T, std::size_t N>
constexpr T& get(array<T, N>& arr) noexcept;
| Mandates: |
|
| Returns: |
|
template<std::size_t Idx, typename T, std::size_t N>
constexpr const T& get(const array<T, N>& arr) noexcept;
| Mandates: |
|
| Returns: |
|
Creation
template<class T, std::size_t N>
constexpr array<T, N> to_array( T const (&a)[N] );
| Returns: |
an |
template<class T, std::size_t N>
constexpr array<T, N> to_array( T (&&a)[N] );
| Returns: |
an |
template<class T, std::size_t N>
constexpr array<T, N> to_array( T const (&&a)[N] );
| Returns: |
an |