C 之Boost array用法簡介

2022-10-04 04:06:06 字數 3069 閱讀 1323

很多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可以正確地釋放掉資源。舉個常見的例子 在資...