青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

西城

指尖代碼,手上年華

聯系 聚合 管理
  20 Posts :: 0 Stories :: 62 Comments :: 0 Trackbacks
首先,命名空間為boost,array較小,只有一個單獨的array.hpp文件。
array的目的主要是在STL的動態數組與傳統功能有限的普通數組之間做一個折衷。為高效的靜態數組增添一些其他的功能。

 

template<class T,std::size_t N>
class array{
public:
T elems[N];

 

內部的底層實現即用的傳統的數組。數組的大小由初始化時指定,但類型則由模板指定。

public:
// type definitions
typedef T value_type;
typedef T* iterator;
typedef const T* const_iterator;
typedef T& reference;
typedef const T& const_reference;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;

類似于STL的特性萃取機制。

// iterator support
iterator begin() { return elems; }
const_iterator begin() const { return elems; }
const_iterator cbegin() const { return elems; }

iterator end() { return elems+N; }
const_iterator end() const { return elems+N; }
const_iterator cend() const { return elems+N; }


提供類似于STL容器的接口。但這里的實現很簡單,因為是靜態數組。注意end()返回的指針是指向
數組之后的一位,這點同STL的接口一致。

reverse_iterator rbegin() { return reverse_iterator(end()); }
const_reverse_iterator rbegin() const {
return const_reverse_iterator(end());
}
const_reverse_iterator crbegin() const {
return const_reverse_iterator(end());
}

reverse_iterator rend() { return reverse_iterator(begin()); }
const_reverse_iterator rend() const {
return const_reverse_iterator(begin());
}
const_reverse_iterator crend() const {
return const_reverse_iterator(begin());
}

反向迭代器,也是類似于STL中的功能,在具體實現上就是用的STL的函數將普通迭代器轉化。

// operator[]
reference operator[](size_type i)
{
BOOST_ASSERT( i < N && "out of range" );
return elems[i];
}

const_reference operator[](size_type i) const
{
BOOST_ASSERT( i < N && "out of range" );
return elems[i];
}

重載【】操作符,兩個版本:const和非const.BOOST_ASSERT是BOOST庫提供的靜態斷言功能,可以在編譯期
發現錯誤。比如說在程序編譯時就可以發現數組越界,報錯。C的最新標準里也加入了靜態斷言的內容。

// at() with range check
reference at(size_type i) { rangecheck(i); return elems[i]; }
const_reference at(size_type i) const { rangecheck(i); return elems[i]; }

at()訪問函數。亦分const 與非const 版本,二者的不同體現雜返回值上。注意前面的定義,reference
為T&,const_reference為const T&.實現上首先也是邊界檢查,我們來看一下rangecheck函數

// check range (may be private because it is static)
static void rangecheck (size_type i) {
if (i >= size()) {
std::out_of_range e("array<>: index out of range");
boost::throw_exception(e);
}
}

若游標大于界限,則拋出異常,std::out_of_range,

class out_of_range : public logic_error {
public:
explicit out_of_range (const string& what_arg);
};


class logic_error : public exception {
public:
explicit logic_error (const string& what_arg);
};

這里的異常的主要是為了向編譯者提供一個清晰的錯誤說明。

// front() and back()
reference front()
{
return elems[0];
}

const_reference front() const
{
return elems[0];
}

reference back()
{
return elems[N-1];
}

const_reference back() const
{
return elems[N-1];
}

front和back函數,實現起來是很簡單的,也很高效的。

// size is constant
static size_type size() { return N; }
static bool empty() { return false; }
static size_type max_size() { return N; }
enum { static_size = N };

類似于STL容器的返回大小的接口。因為是靜態數組,大小不變,所以主要的目的只是為了與STL
的接口兼容,實現起來并沒有多大意義。像empty()函數,對vector來說很有用,但對一個長度固定的
函數則是沒有什么意義的(總是返回false),所以在設計上主要的考慮是在別的地方。

// swap (note: linear complexity)
void swap (array<T,N>& y) {
for (size_type i = 0; i < N; ++i)
boost::swap(elems[i],y.elems[i]);
}

boost:swap是utility中的一個組件。其實現如下:

namespace boost
{
template<class T1, class T2>
void swap(T1& left, T2& right)
{
::boost_swap_impl::swap_impl(left, right);
}
}

而swap_impl的實現在boost命名空間之外。

namespace boost_swap_impl
{
template<class T>
void swap_impl(T& left, T& right)
{
using namespace std;//use std::swap if argument dependent lookup fails
swap(left,right);
}

template<class T, std::size_t N>
void swap_impl(T (& left)[N], T (& right)[N])
{
for (std::size_t i = 0; i < N; ++i)
{
::boost_swap_impl::swap_impl(left[i], right[i]);
}
}
}

boost:swap有兩個template的好處是可以很好地與std:swap分別開來。當同時出現時,std:swap是優先的。

// direct access to data (read-only)
const T* data() const { return elems; }
T* data() { return elems; }

直接返回數組首地址。

T* c_array() { return elems; }

直接返回數組首地址用于進行C類型的數組操作。

template <typename T2>
array<T,N>& operator= (const array<T2,N>& rhs) {
std::copy(rhs.begin(),rhs.end(), begin());
return *this;
}

賦值操作符。用的是STL中的通用算法。

void assign (const T& value) { fill ( value ); } // A synonym for fill
void fill (const T& value)
{
std::fill_n(begin(),size(),value);
}

posted on 2012-03-24 23:05 西城 閱讀(1521) 評論(1)  編輯 收藏 引用 所屬分類: Boost

Feedback

# re: Boost:array源碼解析 2012-03-25 09:49 tb
很棒的   回復  更多評論
  


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产一区二区三区成人欧美日韩在线观看 | 欧美不卡激情三级在线观看| 亚洲国产日韩在线一区模特| 国产在线精品成人一区二区三区 | 亚洲电影免费观看高清| 久久久久久自在自线| 理论片一区二区在线| 欧美激情一区二区三区不卡| 亚洲福利视频二区| 99伊人成综合| 欧美一区精品| 欧美大尺度在线观看| 欧美日韩国产精品一卡| 国产精品美女999| 在线观看日韩av电影| 亚洲每日在线| 欧美一区二区三区久久精品茉莉花 | 猛干欧美女孩| 欧美激情国产日韩精品一区18| 麻豆精品网站| 最新日韩欧美| 午夜精品www| 欧美黑人多人双交| 国产欧美亚洲精品| 亚洲精品老司机| 欧美尤物一区| 亚洲日本无吗高清不卡| 欧美呦呦网站| 欧美视频手机在线| 午夜一区在线| 欧美freesex8一10精品| 国产精品免费观看视频| 亚洲人成网站在线播| 欧美在线不卡| 亚洲精品一二| 久久夜色精品国产欧美乱极品 | 欧美午夜精品久久久久久超碰| 狠狠v欧美v日韩v亚洲ⅴ| 中文在线不卡| 亚洲国产天堂网精品网站| 性色av一区二区三区| 欧美色视频日本高清在线观看| 亚洲福利在线视频| 久久久av毛片精品| 亚洲在线一区| 欧美日韩精品中文字幕| 亚洲人成亚洲人成在线观看| 久久久噜噜噜久噜久久| 亚洲一区二区三区精品在线观看| 欧美连裤袜在线视频| 91久久久久| 欧美激情精品| 欧美www在线| 最新日韩在线视频| 欧美电影在线| 免费高清在线一区| 亚洲高清成人| 亚洲电影av| 欧美 日韩 国产一区二区在线视频| 国产三区二区一区久久| 欧美一区二区三区在| 亚洲综合色婷婷| 国产伦一区二区三区色一情| 亚洲在线视频网站| 亚洲影音先锋| 国产日韩精品一区二区| 久久国产精彩视频| 久久九九免费视频| 亚洲国产精品久久人人爱蜜臀| 麻豆成人综合网| 美玉足脚交一区二区三区图片| 在线成人免费观看| 亚洲第一色中文字幕| 欧美精品久久天天躁| 国产精品99久久久久久www| 99精品视频一区二区三区| 国产精品久久久久aaaa九色| 欧美尤物一区| 免播放器亚洲| 亚洲一区成人| 久久国产欧美精品| 亚洲精品日产精品乱码不卡| 日韩网站在线观看| 国产日韩欧美在线播放| 亚洲精品一区二区在线| 亚洲激情欧美| 国产欧美日韩视频在线观看| 老牛国产精品一区的观看方式| 免费国产自线拍一欧美视频| 欧美久久电影| 午夜精品视频在线观看| 久久精品中文字幕免费mv| 亚洲狼人综合| 欧美亚洲在线观看| 亚洲精品网址在线观看| 亚洲一区二区三区高清| 在线观看91久久久久久| 一本一本久久a久久精品综合妖精| 国产精品在线看| 欧美国产日韩精品| 国产伦精品一区二区三区高清| 欧美a级片网| 国产精品亚洲第一区在线暖暖韩国| 老司机67194精品线观看| 欧美色区777第一页| 欧美成人一二三| 国产精品夜夜夜| 亚洲黄网站在线观看| 国产一区二区av| 一区二区av在线| 亚洲国产小视频在线观看| 亚洲欧美日韩成人| 亚洲网站在线播放| 欧美高清自拍一区| 欧美大片专区| 好吊色欧美一区二区三区四区| 亚洲少妇诱惑| 夜夜爽99久久国产综合精品女不卡| 羞羞漫画18久久大片| 亚洲一区二区三区精品动漫| 欧美国产精品劲爆| 免费成人性网站| 国产在线视频欧美一区二区三区| 正在播放亚洲| 亚洲视频一二| 欧美日韩国内| 99综合精品| 亚洲视频在线观看三级| 欧美精品一区二区蜜臀亚洲 | 久久综合伊人77777尤物| 国产美女精品视频| 宅男噜噜噜66一区二区| 亚洲一级影院| 国产精品国产三级欧美二区| 亚洲美女电影在线| 一本高清dvd不卡在线观看| 免费毛片一区二区三区久久久| 久久只精品国产| 在线观看中文字幕亚洲| 久久久久久一区二区| 免费高清在线一区| 亚洲高清中文字幕| 欧美激情按摩在线| 亚洲精品视频在线| 在线一区二区三区做爰视频网站| 欧美精品免费播放| 99re国产精品| 午夜伦欧美伦电影理论片| 国产精品欧美久久久久无广告| 亚洲一区二区免费在线| 久久精品国产99国产精品澳门| 国产一区在线观看视频| 久久婷婷一区| 91久久午夜| 亚洲女人小视频在线观看| 久久成人一区| 快播亚洲色图| 一本色道久久综合亚洲精品小说| 欧美日韩精品系列| 午夜日韩在线| 欧美激情欧美狂野欧美精品| 夜夜夜久久久| 国产日本亚洲高清| 欧美福利影院| 午夜精品福利在线| 欧美国产综合一区二区| 亚洲一区二三| 在线播放中文一区| 欧美日韩一区二区三区视频| 亚洲欧美日本伦理| 欧美激情一区二区三区高清视频| 99综合视频| 国产一区二区黄色| 欧美精品在线视频| 欧美资源在线观看| 亚洲精选视频免费看| 久久精品国产2020观看福利| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲黄色一区| 欧美午夜片在线观看| 久久精品盗摄| 一区二区三区黄色| 欧美电影电视剧在线观看| 亚洲欧美日韩在线综合| 亚洲国产精品久久人人爱蜜臀 | 99v久久综合狠狠综合久久| 国产欧美日韩亚洲一区二区三区| 麻豆精品在线播放| 欧美一级电影久久| 亚洲免费观看| 欧美fxxxxxx另类| 欧美专区18| 亚洲午夜精品17c| 亚洲激情在线观看| 狠狠爱www人成狠狠爱综合网| 欧美手机在线视频| 欧美乱大交xxxxx| 能在线观看的日韩av| 欧美一区二区视频观看视频| 中文在线资源观看视频网站免费不卡|