太極1:STL:vector和string

The Eighth發表於2020-12-02

STL:
什麼是STL?

STL是C++中標準模板庫------------standard template library
實際上STL就是對常見資料結構(線性表(順序表、連結串列)+棧和堆列+二叉樹+雜湊)以模板的方式進行了封裝
目的:替使用者組織資料
裡面和增加了一些非常靈活和通用的演算法----->主要是對資料進行操作的sort/reverse

------------------------------分界線-------------------------------------
STL對常見的資料結構的封裝(模板類)
序列式容器(線性資料結構)

string:專門用來管理字串的動態動態型別的順序表
vector:管理任意型別的動態型別順序表
list:帶頭結點迴圈雙向連結串列
deque:雙端佇列-----類似於動態的二維陣列

關鍵式容器:----<k,v>
底層為紅黑樹結構
map
set
multimap
multiset

底層為雜湊結構
unordered_map
unordered_set
unordered_multimap
unordered_multisset


**迭代器**
概念:提供一個結構,可以依次遍歷容器中的元素,而又無需暴露容器的底層實現原理
作用:主要是給演算法來應用的,讓演算法可以操作任意容器中的資料
本職:就是一個指標||對指標進行分裝

----------------------------------------分界線--------------------------

演算法:解決問題的步驟
分類:1.與資料結構相關聯的演算法:就是容器中的成員函式
2.通用演算法:sort/reverse/foreach…
注意:演算法要操作不同容器中的資料,必須要藉助迭代器

仿函式/函式物件:
概念:可以像函式一樣使用的物件
實現:只需在該類中將()函式呼叫運算子過載即可
作用:用來配置演算法的功能,使演算法更加的靈活

介面卡:是一種設計模式
概念:將其他結構進行封裝然後形成一種新的結構
容器介面卡:stack/queue/priority queue
迭代器介面卡:反向迭代器------其內部就是對正向迭代器進行封裝
函式介面卡

空間配置器(記憶體池):高效為STL中各個容器申請和釋放空間,以及對空間進行管理

-------------------------------------分界線-----------------------------

string:
C語言中實際沒有專門的字串型別

string的常用介面:
構造和析構:
string():構造一個空字串
string(size_t,char ch):用n個字串ch構造一個string型別的物件
string(char* str):用C格式的字串構造string物件
string(const string& s):拷貝構造
迭代器:
begin()/end()

容量:
size_t size()/length(): 返回有效元素的個數
size_t capacity():返回底層空間的總大小
bool empty():檢測該字串是否為空串------->是:true ,否:false
void resize(size_t newsize,char ch=char());

部分操作:
字串變數字:
string s(“1234”); int i=aoti(s.c_str());
cout<<i<<endl; 列印出來1234

查詢:
string s(“iloveyou”);
int i = s.find(“lov”);
cout << i << endl;

擷取一段字串:
string s(“iloveyou”);
string s1=s.substr(2, 5);
cout<<s1<<endl;

------------------------------------分界線------------------------------

vector:
1.底層結構:
動態型別的順序表,可以存放任意型別的元素

2.常用介面:
構造和析構
vector():構造一個空的vector
vector(size_t n,const T& data=T());用n個值為data的元素構造vector
vector(first,last):用(first,last)區間中的元素構造vector
vector(const vector&):拷貝建構函式

3.迭代器:
begin()/end();

4.容量:
size_t size();返回有效的元素
size_t capacity():返回空間的總大小
bool empty(); 檢測vector是否為空,是:true 否:false

5.訪問:
1.固定兩端訪問:
front() 返回第一個元素的引用
back() 返回最後一個元素的引用

6.修改:
void push_back(const T& data) 尾插
void pop_back(): 尾刪

任意位置插入:
iterator insert(iterator pos,const T& data)
iterator insert(iterator pos,size_t n,const T& data)
iterator insert(iterator pos,iterator first,iterator last);

任意位置的刪除:
iterator erase(iterator pos);
iterator erase(iterator first,iteator last);

將vector中的有效元素清空:
void clear();

交換:
void swap(vector& v);

相關文章