C STL的一些歸納

2021-10-03 20:47:54 字數 3347 閱讀 7386

一、vector使用

之前c語⾔⾥⾯⽤ int arr 定義陣列,它的缺點是陣列的⻓度不能隨⼼所欲的改變,⽽c++⾥⾯有⼀能完全替代陣列的動態陣列 vector它能夠在運⾏階段設定陣列的⻓度、在末尾增加新的資料、在中間插⼊新的值、⻓度意被改變,很好⽤~它在頭⽂件 vector ⾥⾯,也在命名空間 std ⾥⾯,所以使⽤的時候要引⼊頭件 #include 和 using namespace std vector 、 stack 、 queue 、 map 、 set 這些在c++中都叫做容器,這些容器的⼤⼩都可以⽤ .size(獲取到,就像 string s 的⻓度⽤ s.length() 獲取⼀樣~( string 其實也可以⽤ s.size() ,不過對vector 、 stack 、 queue 、 map 、 set 這樣的容器我們⼀般討論它的⼤⼩ size ,字串⼀般討它的⻓度 length ~其實 string ⾥⾯的 size 和 length 兩者是沒有區別、可以互換使⽤的,

#include using namespace std;

int main()

可以⼀開始不定義⼤⼩,之後⽤resize⽅法分配⼤⼩,也可以⼀開始就定義⼤⼩,之後還可對它插⼊刪除動態改變它的⼤⼩~⽽且不管在main函式⾥還是在全域性中定義,它都能夠直接將所的值初始化為0(不⽤顯式地寫出來,預設就是所有的元素為0),再也不⽤擔⼼c語⾔⾥⾯出現的種 int arr[10]; 結果忘記初始化為0導致的各種bug

">// 或者

vectorv1;

v1.resize(8); //先定義⼀個vector變數v1,然後將⻓度resize為8,預設這8個元素都是0

// 在定義的時候就可以對vector變數進⾏初始化

vectorv3(100, 9);// 把100⻓度的陣列中所有的值都初始化為9

// 訪問的時候像陣列⼀樣直接⽤下標訪問即可~(也可以⽤迭代器訪問,下⾯會講~) v[1] = 2;

cout << v[0];

#include using namespace std;

int main()

cout << a.size() << endl; // 此時會發現a的size變成了10

vectorb(15); // 定義的時候指定vector的⼤⼩,預設b⾥⾯元素都是0

cout << b.size() << endl;

for (int i = 0; i < b.size(); i++)

for (int i = 0; i < b.size(); i++)

cout << endl;

vectorc(20, 2); // 定義的時候指定vector的⼤⼩並把所有的元素賦⼀個指定的值

for (int i = 0; i < c.size(); i++)

cout << endl;

for (auto it = c.begin(); it != c.end(); it++)

return 0; }

容器 vector 、 set 、 map 這些遍歷的時候都是使⽤迭代器訪問的, c.begin() 是⼀個指標,指向容的第⼀個元素, c.end() 指向容器的最後⼀個元素的後⼀個位置,所以迭代器指標 it 的for迴圈判斷件是 it != c.end()

二、set的使⽤

#include using namespace std;

int main()

for (auto it = s.begin(); it != s.end(); it++)

cout << endl << (s.find(2) != s.end()) << endl; // 查詢集合s中的值,如果結果等於

s.end()表示未找到 (因為s.end()表示s的最後⼀個元素的下⼀個元素所在的位置)

cout << (s.find(10) != s.end()) << endl; // s.find(10) != s.end()表示能找到10

這個元素

s.erase(1); // 刪除集合s中的1這個元素

cout << (s.find(1) != s.end()) << endl; // 這時候元素1就應該找不到啦~

return 0; }

三、mapmap 是鍵值對,⽐如⼀個⼈名對應⼀個學號,就可以定義⼀個字串 string 型別的⼈名為「鍵」,號 int 型別為「值」,如 mapm; 當然鍵、值也可以是其它變數型別~ map 會⾃動將所有鍵值對按照鍵從⼩到⼤排序, map 使⽤時的頭⽂件 #include 以下是 map 中常⽤的⽅法:

#include #include using namespace std;

int main()

// 訪問map的第⼀個元素,輸出它的鍵和值

cout << m.begin()->first << " " << m.begin()->second << endl;

// 訪問map的最後⼀個元素,輸出它的鍵和值

cout << m.rbegin()->first << " " << m.rbegin()->second << endl;

// 輸出map的元素個數

cout << m.size() << endl;

return 0; }

四、棧stack的使⽤

#include using namespace std;

int main()

cout << s.top() << endl; // 訪問s的棧頂元素

cout << s.size() << endl; // 輸出s的元素個數

s.pop(); // 移除棧頂元素

return 0; }

五、佇列queue的使⽤

#include using namespace std;

int main()

cout << q.front() << " " << q.back() << endl; // 訪問佇列的隊⾸元素和隊尾元素

cout << q.size() << endl; // 輸出佇列的元素個數

q.pop(); // 移除佇列的隊⾸元素

return 0; }

這個應用在這道題裡體現:馬的遍歷

c stl 一些東西

std map 其key是基於比較運算子的,因此自定義型別需要為該型別設定比較運算子操作 class a private int mm std mapkk std unordered map 基於hash實現,需要為自定義型別設定 運算子和雜湊函式 class a int get value con...

UART的一些歸納

uart是一種通用序列資料匯流排,用於非同步通訊。該匯流排雙向通訊,可以實現全雙工傳輸和接收。在嵌入式設計中,uart用於主機與輔助裝置通訊,如汽車音響與外接ap之間的通訊,與pc機通訊包括與監控偵錯程式和其它器件,如eeprom通訊。它將計算機內部傳送過來的並行資料轉換為輸出的序列資料流。將計算機...

C STL 容器的一些總結

容器中的元素為有序排列,可以指定元素插入位置.順序儲存,初始化過程會分配一定量空間,在尾部插入會很快,但是在中間插入元素,會把之後所有元素向後平移,所以較慢 中間刪除元素同理 如果元素個數超過當前限制,會重新分配更大空間,再把原容器中所有元素都拷貝到新的容器中.同vector類似,最大的好處是在頭尾...