3 容器的分類與測試 array

2021-10-08 07:04:03 字數 2850 閱讀 3659

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...