零、STL目錄html
一、容器之mapnode
二、容器之vector數組
三、容器之set函數
1、前言spa
關於STL和STL容器的概念參見STL系列第一篇——map(見上)。今天介紹第二個成員——vector。code
2、用途htm
vector的本質是數組,但更爲靈活,高級。數組在定義時須要肯定範圍,可能存在浪費內存或者越界兩大問題,而能夠動態拓展的vector完美解決了這兩個問題,它至關因而能夠分配拓展的數組。vector支持各類數據類型。blog
3、構造與功能排序
一、構造內存
struct node { int x; char y; }; vector <int> a; vector <string> b; vector <node> c; vector <int>::iterator it;
支持各類數據類型,結構體亦可。迭代器再也不介紹,詳情參見map(見上)。
二、功能
vector實在算是STL容器中最好理解的了,同時有了前面map的鋪墊,函數大可大同小異,大部分都不詳細介紹了,直接給個列表。
兩個沒有說起的函數單獨拎出來——lower_bound和upper_bound。
首先,其意義與map中說起的一致:lower_bound()返回值 >= 給定元素的第一個位置,upper_bound()返回值 > 給定元素的第一個位置。
而後,這倆函數能被用於:map, vector, set, multiset。map, set沒什麼特別的,而在vector中用法略有不一樣。
在vector中,兩個函數存在三個參數:(首地址,尾地址,值)。因爲sort對vector的完美支持,咱們能夠利用這兩個函數進行快速的區間大小查詢。首先對數組進行快速排序(默認從小到大),而後利用lower_bound函數二分查找第一個大於等於該值的位置。具體運用參見:《[分塊] 數列分塊入門1-9》中的「分塊練習2」。