C++STL(一) vector容器
互聯網 2022/1/4 14:17:55
STL六大組件:容器、算法、迭代器、仿函數、適配器(配接器)、空間配置器
Vector所采用的數據結構非常簡單,線性連續空間,它以兩個迭代器_Myfirst和_Mylast分別指向配置得來的連續空間中目前已被使用的范圍,并以迭代器_Myend指向整塊連續內存空間的尾端。
為了降低空間配置時的速度成本,vector實際配置的大小可能比客戶端需求大一些,以備將來可能的擴充,這邊是容量的概念。換句話說,一個vector的容量永遠大于或等于其大小,一旦容量等于大小,便是滿載,下次再有新增元素,整個vector容器就得另覓居所。
注意:
所謂動態增加大小,并不是在原空間之后續接新空間(因為無法保證原空間之后尚有可配置的空間),而是一塊更大的內存空間,然后將原數據拷貝新空間,并釋放原空間。因此,對vector的任何操作,一旦引起空間的重新配置,指向原vector的所有迭代器就都失效了。這是程序員容易犯的一個錯誤,務必小心。 |
常用方法
v.begin();
v.end();
v.push_back(value);
v.pop_back();
v.capacity();
v.assign(v1.begin(),v1.end());
v.empty();
v.front();
v.back();
v.resize(num);
v.swap(v1);
v.clear();
v.erase(v.begin);
#include<iostream> #include<string> #include<vector> #include<list> using namespace std; void printVector(vector<int> v) { for (vector<int>::iterator i = v.begin(); i != v.end(); ++i) { cout << *i <<" "; } cout << "\n"; } void test01() { vector<int> v1; for (int i = 0; i < 10; i++) { v1.push_back(i + 1); cout << v1.capacity() << " "; } cout << "\n"; printVector(v1); vector<int> v2(v1.begin(),v1.end()); printVector(v2); vector<int> v3; v3.assign(v1.begin(),v1.end()); printVector(v3); vector<int>v4(10, 100); printVector(v4); v3.swap(v4); printVector(v3); printVector(v4); } void test02() { vector<int> v1; v1.push_back(1); v1.push_back(2); v1.push_back(3); v1.push_back(4); //v1.resize(10); printVector(v1); cout << v1.empty() << endl; cout << "第一個" << v1.front() << endl; cout << "最后一個" << v1.back() << endl; v1.pop_back(); printVector(v1); v1.clear(); cout << v1.empty() << endl; v1.push_back(1); v1.push_back(2); v1.push_back(3); v1.push_back(4); v1.push_back(5); v1.erase(v1.begin()); printVector(v1); v1.erase(v1.begin(), v1.end()); cout << v1.empty() << endl; } //內存壓縮 void test03() { vector<int> v1; for (int i = 0; i < 10000; i++) { v1.push_back(i + 1); } cout << v1.capacity() << endl; cout << v1.size() << endl; v1.resize(10000); vector<int>(v1).swap(v1); cout << v1.capacity() << endl; cout << v1.size() << endl; } //內存預留 void test04() { vector<int> v1; v1.reserve(10000); int* p = NULL; int num = 0; for (int i = 0; i < 10000; i++) { v1.push_back(i + 1); if (p!=&v1[0]) { p = &v1[0]; num++; } } cout << v1.capacity() << endl; cout << v1.size() << endl; cout << "num=" << num << endl; } void test05() { vector<int> v1; v1.push_back(1); v1.push_back(2); v1.push_back(3); v1.push_back(4); //逆序遍歷 for (vector<int>::reverse_iterator i = v1.rbegin(); i != v1.rend(); i++) { cout << *i << endl; } vector<int>::iterator num = v1.begin()+3; cout << *num << endl; list<int> l1; l1.push_back(1); l1.push_back(2); l1.push_back(3); l1.push_back(4); list<int>::iterator i = l1.begin(); i++; cout << *i << endl; } int main() { test01(); test02(); test03(); test04(); test05(); system("pause"); return EXIT_SUCCESS; }

關于找一找教程網
本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。
本站提供了軟件編程、網站開發技術、服務器運維、人工智能等等IT技術文章,希望廣大程序員努力學習,讓我們用科技改變世界。
[C++STL(一) vector容器]http://www.yachtsalesaustralia.com/tech/detail-279902.html
- 2022-05-20Oracle-adg ORA-64356 in-memory area out of space
- 2022-05-20oracle記錄被另一個用戶鎖住
- 2022-05-20oracle的連接
- 2022-05-20oracle學習筆記
- 2022-05-20Oracle 簡單操作命令
- 2022-05-20c++:-8
- 2022-05-20C++_標準庫和第三方庫
- 2022-05-20curl 下載地址中有特殊字符解決方案
- 2022-05-20絞盡腦汁,幫你理解方法本質并選擇正確的receiver類型
- 2022-05-20如何在CentOS 8上安裝FFmpeg