本文實例講述了c++里支持靜態數組的容器:boost.array。分享給大家供大家參考。具體分析如下:
很多C++程序員都認為boost.array很有可能出現在下一代標準庫里。對于boost.array的用法有一個基本的了解是很有必要的。
1. 為什么我們需要固定大小的數組的容器
首先,固定大小的數組還是很常見的,雖然stl提供了vector,但是vector作為動態可增長的數組,比靜態數組多了一點開銷,這在一些人看來是無法忍受的。c++里也需要提供固定大小容量的數組容器,當然,性能可以和普通數組想媲美。
boost.array應此需求而生。
boost.array 實現了大部分但不是全部的“可逆容器(reversable container)”的需求。array 不是一個 STL 可逆容器的原因在于:
① 沒有提供構造函數。
② 元素可能有一個不確定的初始值。
③ swap() 不具有常量復雜度。
④ size() 基于第二個模板參數的類型,總是恒定的。
⑤ 容器不提供分配器支持。
它沒有實現“序列”的需求(具體可參見 C++ 標準的 23.1.1, [lib. sequence.reqmts]),但以下這些除外:
① 提供了 front() 和 back()。
② 提供了 operator[] 和 at()。
2. 頭文件和相關成員函數聲明:
Reference
Header <boost/array.hpp>
Class template array(類模板 array)
array 公有的 構造/拷貝/析構
template<typename U> array& operator=(const array<U, N>& other);
array 迭代器支持:
1.iterator begin();
const_iterator begin() const;
返回: | 位于第一個元素的迭代器 |
拋出: | 不拋出異常 |
2.iterator end();
const_iterator end() const;
返回: | 位于最后一個元素之后位置的迭代器 |
拋出: | 不拋出異常 |
array 反向迭代器支持:
1.reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
返回: | 位于反向迭代的第一個元素的反向迭代器 |
2.reverse_iterator rend();
const_reverse_iterator rend() const;
返回: | 位于反向迭代的最后一個元素之后位置的反向迭代器 |
array 容量:
1.size_type size();
返回: | N |
2.bool empty();
返回: | N==0 |
拋出: | 不拋出異常 |
3.size_type max_size();
返回: | N |
拋出: | 不拋出異常 |
array 元素訪問:
1.reference operator[](size_type i);
const_reference operator[](size_type i) const;
Requires: | i < N |
返回: | 索引為 i 的元素 |
拋出: | 不拋出異常。 |
2.reference at(size_type i);
const_reference at(size_type i) const;
返回: | 索引為 i 的元素 |
拋出: | std::range_error if i >= N |
3.reference front();
const_reference front() const;
要求: | N > 0 |
返回: | 第一個元素 |
拋出: | 不拋出異常 |
4.reference back();
const_reference back() const;
要求: | N > 0 |
返回: | 最后一個元素 |
拋出: | 不拋出異常 |
5.const T* data() const;
返回: | elems |
拋出: | 不拋出異常 |
6.T* c_array();
返回: | elems |
拋出: | 不拋出異常 |
array 修改器:
1.void swap(array<T, N>& other);
效果: | std::swap_ranges(begin(), end(), other.begin()) |
復雜度: | 基于 N 的線性增長 |
2.void assign(const T& value);
效果: | std::fill_n(begin(), N, value) |
array 特殊算法:
1.template<typename T, std::size_t N> void swap(array<T, N>& x, array<T, N>& y);
效果: | x.swap(y) |
拋出: | 不拋出異常。 |
希望本文所述對大家的C++程序設計有所幫助。
新聞熱點
疑難解答
圖片精選