C 容器與演算法

2022-05-06 09:12:12 字數 4404 閱讀 3372

容器:某一型別資料的集合。

c++標準順序容器包括:vector,list,queue

vectort;

for (int i = 0; i < 50; i ++)

vector

c; //

空容器 vector c1(t); //

容器t的副本

vector c2(3, 4); //

3個值為4的容器

vector c3(t.begin(), t.end() - 10); //

容器t的begin()和end()-10之前的資料副本

vector c4(5); //

建立包含5個空預設值的副本

容器型別的規則:支援複製和賦值操作

視窗的迭代訪問非常類似指標的操作,都支援++和--的位移操作,迭代器內建了操作符過載。

*item

item->num

++item

item++

--item

item--iter1 ==iter2

iter1 != iter2

迭代器訪問

for (vector::iterator iter = strs2.begin(); iter != strs2.end(); iter ++)
迭代器的首元素迭代器和尾元素迭代器可以通過begin()和end()方法獲取,並通過++方法進行迭代。

迭代器操作的api:

iterators:

beginreturn iterator to beginning (public member function )

endreturn iterator to end (public member function )

rbeginreturn reverse iterator to reverse beginning (public member function)

rendreturn reverse iterator to reverse end (public member function)

容器的元素型別

of template > class vector;

member type

definition

reference

allocator::reference

const_reference

allocator::const_reference

iterator

random access iterator

const_iterator

constant random access iterator

size_type

unsigned integral type (usually same as size_t)

difference_type

signed integral type (usually same as ptrdiff_t)

value_type

tallocator_type

allocator

pointer

allocator::pointer

const_pointer

allocator::const_pointer

reverse_iterator

reverse_iterator

const_reverse_iterator

reverse_iterator

通過reverse型別屬性,可以逆序訪問容器的迭代器

容器的api提供在具體什麼位置增加或者刪除元素,或者在什麼元素增加或者刪除元素:

modifiers:

assignassign vector content (public member function)

push_backadd element at the end (public member function)

pop_backdelete last element (public member function)

insertinsert elements (public member function)

eraseerase elements (public member function )

swapswap content (public member function )

clearclear content (public member function)

capacity:

sizereturn size (public member function)

max_sizereturn maximum size (public member function )

resizechange size (public member function)

capacityreturn size of allocated storage capacity (public member function)

emptytest whether vector is empty (public member function)

reserverequest a change in capacity (public member function)

c++中的關聯容器包括 map 和 set

map與key, value相對應,整合起來map與pair型別對應

set 直接與 value相對應

同時存在multimap和multiset兩個物件,支援乙個key對應多個value

具體可以參考:

最常見的是find方法,c++中的示例:

// 包含必要的標頭檔案

#include

vector vec(2, 35

);vec.push_back(8);

vec.push_back(

80);

vec.push_back(

98);

vec.push_back(

25);

vec.push_back(

12);

vector

::const_iterator result = find(vec.begin(), vec.end(), 80

);std::cout

<< 80

<< (result == vec.end() ? "

is not present

" : "

is present

") << std::endl;

除了少數情況下,c++的容器演算法都是在乙個範圍內的元素進行操作。所以其引數順序情況一般為:iter_begin, iter_end, search_value。

c++容器使用的演算法與資料結構書中大致相同:

1. 唯讀演算法(查詢)

2. 寫演算法(排序)

3. 合併

4. 堆

5. 最大/最小值等

常用唯讀演算法:

實踐了fill, fill_n, back_inserter, copy, replace, sort, count_if

#include #include 

#include

#include

#include

using

namespace

std;

void log(std::string

log)

void

apitest()

intmain()

vector

vec2;

copy(vec.begin(), vec.end(), back_inserter(vec2));

return0;

}

輸出結果:

關於容器演算法相關一章可參考:

容器與演算法

operator 過載小括號 模板中const 對型別進行嚴格檢測 const t 指向乙個常量的指標 1.類模板顯示特化 2.預設模板引數 3.成員模板 4.模板類的成員函式可以是乙個模板 已結有了vector新增成員,就需要成員函式 關鍵字typename 作為型別前的識別符號 template...

C 容器和演算法

c 容器和演算法 容器部分 順序容器 vector deque list 通過元素在容器中的位置順序儲存和訪問元素 vector 支援快速隨機訪問 容器介面卡為stack後進先出棧 deque 雙端佇列 容器介面卡為priority queue有優先順序管理的佇列 list 支援快速插入 刪除 容器...

C 容器和演算法

1.map和set有什麼區別,分別又是怎麼實現的?2.stl的allocator?c 容器的空間配置器,由兩級分配器構成,大於128位元組,呼叫一級配置器,malloc free,realloc 小於128位元組,預設二級配置器,分配記憶體池。為了便於記憶體管理,減少記憶體碎片產生 3.stl 標準...