本文實(shí)例講述了c++里支持靜態(tài)數(shù)組的容器:boost.array。分享給大家供大家參考。具體分析如下:
很多C++程序員都認(rèn)為boost.array很有可能出現(xiàn)在下一代標(biāo)準(zhǔn)庫(kù)里。對(duì)于boost.array的用法有一個(gè)基本的了解是很有必要的。
1. 為什么我們需要固定大小的數(shù)組的容器
首先,固定大小的數(shù)組還是很常見(jiàn)的,雖然stl提供了vector,但是vector作為動(dòng)態(tài)可增長(zhǎng)的數(shù)組,比靜態(tài)數(shù)組多了一點(diǎn)開(kāi)銷(xiāo),這在一些人看來(lái)是無(wú)法忍受的。c++里也需要提供固定大小容量的數(shù)組容器,當(dāng)然,性能可以和普通數(shù)組想媲美。
boost.array應(yīng)此需求而生。
boost.array 實(shí)現(xiàn)了大部分但不是全部的“可逆容器(reversable container)”的需求。array 不是一個(gè) STL 可逆容器的原因在于:
① 沒(méi)有提供構(gòu)造函數(shù)。
② 元素可能有一個(gè)不確定的初始值。
③ swap() 不具有常量復(fù)雜度。
④ size() 基于第二個(gè)模板參數(shù)的類(lèi)型,總是恒定的。
⑤ 容器不提供分配器支持。
它沒(méi)有實(shí)現(xiàn)“序列”的需求(具體可參見(jiàn) C++ 標(biāo)準(zhǔn)的 23.1.1, [lib. sequence.reqmts]),但以下這些除外:
① 提供了 front() 和 back()。
② 提供了 operator[] 和 at()。
2. 頭文件和相關(guān)成員函數(shù)聲明:
Reference
Header <boost/array.hpp>
Class template array(類(lèi)模板 array)
array 公有的 構(gòu)造/拷貝/析構(gòu)
template<typename U> array& operator=(const array<U, N>& other);
array 迭代器支持:
1.iterator begin();
const_iterator begin() const;
| 返回: | 位于第一個(gè)元素的迭代器 |
| 拋出: | 不拋出異常 |
2.iterator end();
const_iterator end() const;
| 返回: | 位于最后一個(gè)元素之后位置的迭代器 |
| 拋出: | 不拋出異常 |
array 反向迭代器支持:
1.reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
| 返回: | 位于反向迭代的第一個(gè)元素的反向迭代器 |
2.reverse_iterator rend();
const_reverse_iterator rend() const;
| 返回: | 位于反向迭代的最后一個(gè)元素之后位置的反向迭代器 |
array 容量:
1.size_type size();
| 返回: | N |
2.bool empty();
| 返回: | N==0 |
| 拋出: | 不拋出異常 |
3.size_type max_size();
| 返回: | N |
| 拋出: | 不拋出異常 |
array 元素訪(fǎng)問(wèn):
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 |
| 返回: | 第一個(gè)元素 |
| 拋出: | 不拋出異常 |
4.reference back();
const_reference back() const;
| 要求: | N > 0 |
| 返回: | 最后一個(gè)元素 |
| 拋出: | 不拋出異常 |
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()) |
| 復(fù)雜度: | 基于 N 的線(xiàn)性增長(zhǎng) |
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) |
| 拋出: | 不拋出異常。 |
希望本文所述對(duì)大家的C++程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
網(wǎng)友關(guān)注