很多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
class template array(類模板 array)
array 公有的 構造/拷貝/析構
template array& operator=(const array& 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& other);
效果:std::swap_ranges(begin(), end(), other.begin())
複雜度:
基於&wplzxomzknbsp;n 的線性增長
2.void assign(const t& value);
效果:std::fill_n(begin(), n, value)
array 特殊演算法:
1.template void swap(array& x, array& y);
效果:x.swap(y)
丟擲:不丟擲異常。
可見boost.array提供了和stl容器的通用介面。因此用起來很簡單。值得一提的是,boost並沒有提供自定義的建構函式和拷貝建構函式。但是boost.array可以這樣初始化:
複製** **如下:
#includewplzxomzkgt;
#include
using namespace std;
using namespace boost;
int main()
; //普通陣列相一致的訪問形式
for(size_t i = 0; i < a.size(); i++)
cout << a[i] << " " ;
cout << endl;
//迭代器訪問
&nbwplzxomzksp; array::iterator itr = a.begin();
for(;itr != a.end();++itr)
cout << *itr << " " ;
cout << endl;
//支援at()
cout << a.at(5) << endl;
return 0;
本文標題: c++之boost::array用法簡介
本文位址:
sscanf用法簡析
1.常見用法。char buf 512 sscanf 123456 s buf printf s n buf 結果為 123456 2.取指定長度的字串。如在下例中,取最大長度為4位元組的字串。sscanf 123456 4s buf printf s n buf 結果為 1234 3.取到指定字元...
C 執行緒池ThreadPool的用法簡析
什麼是執行緒池?為什麼要用執行緒池?怎麼用執行緒池?1.什麼是執行緒池?net framework的threadpool類提供乙個執行緒池,該執行緒池可用於執行任務 傳送工作項 處理非同步 i o 代表其他執行緒等待以及處理計時器。那麼什麼是執行緒池?執行緒池其實就是乙個存放執行緒物件的 池子 po...
C 之RAII慣用法
c 中的raii全稱是 resource acquisition is initialization 直譯為 資源獲取就是初始化 但是這翻譯並沒有顯示出這個慣用法的真正內涵。raii的好處在於它提供了一種資源自動管理的方式,當產生異常 回滾等現象時,raii可以正確地釋放掉資源。舉個常見的例子 在資...