array是一種固定長度的sequence container(順序容器)
/*
* @file: container_test.cpp
*/#include
"container.h"
intmain
(int argc,
char
**ar**)
輔助測試方法
/*
* @file: helper.h
*/#ifndef __helper__
#define __helper__
using namespace std;
const
long asize =
500000l
;long
get_a_target_long()
string get_a_target_string()
intcomparelongs
(const
void
*a,const
void
*b)int
comparestrings
(const
void
*a,const
void
*b)#endif
/*
* @file: container.h
*/#ifndef _container_
#define _container_
#include
#include
#include
#include
// qsort, bsearch, null
#include
"helper.h"
namespace jj01
cout <<
"milli-seconds : "
<<
(clock()
- timestart)
<< endl;
cout <<
"array.size() = "
<< c.
size()
<< endl;
cout <<
"array.front() = "
<< c.
front()
<< endl;
cout <<
"array.back() = "
<< c.
back()
<< endl;
cout <<
"array.data() = "
<< c.
data()
<< endl;
long target =
get_a_target_long()
; timestart =
clock()
;::qsort
(c.data()
, asize,
sizeof
(long
), comparelongs)
;long
* pitem =
(long*)
::bsearch
(&target,
(c.data()
), asize,
sizeof
(long
), comparelongs)
; cout <<
"qsort() + bsearch(), seconds : "
<<
double
(clock()
- timestart)
/ clocks_per_sec << endl;}}
#endif
在c++11 c++14 c++98下介輸出正常:
pam:~/container_test$ ./container
test_array()..
....
....
milli-seconds : 31713
array.size(
)= 500000
array.front(
)= 118519692
array.back(
)= 2077013023
array.data(
)= 0x7ffc5c05bee0
target (0 ~ 2147483647): 4535
qsort(
) + bsearch(
), seconds : 0.359465
總結:
標準c庫中的排序和查詢演算法不像c++標準庫中那麼多, 這裡用到了cstdlib中的快速排序庫函式qsort()和二分查詢bsearch()庫函式, 二分查詢只有排好序的前提下才能用.
array.data() 取得array的首位址
array.size() 返回array裡元素的總個數
array.front() 第乙個元素
array.back() 最後乙個元素
qsort(c.data(), asize, sizeof(long), comparelongs); 從c.data()位址開始的地方開始, 對asize個空間大小為sizeof(long)的元素按照comparelongs的規則進行排序.
bsearch(&target, (c.data()), asize, sizeof(long), comparelongs) 在按照comparelongs排好序的位址空間查詢目標target, 該空間的起始位址為c.data()的個數為asize的大小為sizeof(long)的連續空間.
第二講 容器分類與各種測試
一 容器 分為序列容器 關聯容器 不定續容器 不定續容器 在資料存入容器中,位置不確定 序列容器 都有一定的次序,按照放進去的次序 array 用key來找value就非常快,所以比較適合查詢。vector deque 雙向 list 雙向鍊錶 forward list 單向鍊錶 關聯容器 set ...
容器之分類與各種測試(四) multimap
multiset和multimap的具體區別在於,前者的key值就是自己儲存的value,後者的key與value是分開的不相關的。例程 include include include include include include include includeusing namespace st...
容器之分類與各種測試(三) stack
stack是棧,其實現也是使用了雙端佇列 只要不用雙端佇列的一端,僅用單端資料進出即完成單端佇列的功能 由於queue和stack的實現均是使用deque,沒有自己的資料結構和演算法,所以這倆也被稱為容器介面卡 container adapter 例程 include include include...