STL9-vector容器
生活随笔
收集整理的這篇文章主要介紹了
STL9-vector容器
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
vector容器 動態(tài)數(shù)組 可變數(shù)組
vector容器 單口容器
vector實現(xiàn)動態(tài)增長:
???? 當(dāng)插入新元素時,如果空間不足,那么vector會重新申請更大內(nèi)存空間(默認二倍),將原空間數(shù)據(jù)拷貝到新空間,釋放舊空間的數(shù)據(jù),再把新元素插入新申請空間。
當(dāng)我們知道我們存儲的元素大概有多少時,使用reserve方法,減少vector重新申請內(nèi)存-拷貝數(shù)據(jù)-釋放舊空間的次數(shù)
#include<iostream> #include<vector> using namespace std; void test01() {vector<int> v;int* p=NULL;int count = 0; //統(tǒng)計vector容量增長次數(shù)for (int i = 0; i < 100000; i++){v.push_back(i);if (p != &v[0]) {p = &v[0]; //內(nèi)存首地址發(fā)生變化,申請新內(nèi)存count++;}}cout << count << endl; } void test02() {vector<int> v;v.reserve(100000);int* p=NULL;int count = 0; //統(tǒng)計vector容量增長次數(shù)for (int i = 0; i < 100000; i++){v.push_back(i);if (p != &v[0]) {p = &v[0];count++;}}cout << count << endl; } int main() {test01();test02(); }輸出:
#include<iostream> #include<vector> using namespace std;void PrintVector(vector<int>& v) {for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl; }//初始化 void test01() {vector<int> v1; //默認構(gòu)造int arr[] = { 10,20,30,40 };vector<int> v2(arr, arr + sizeof(arr) / sizeof(int));vector<int> v3(v2.begin(), v2.end());vector<int> v4(v3);PrintVector(v2);PrintVector(v3);PrintVector(v4); } /* 輸出: 10 20 30 40 10 20 30 40 10 20 30 40 *///賦值操作 void test02() {int arr[] = { 10,20,30,40 };vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));//成員方法vector<int> v2;v2.assign(v1.begin(), v1.end());//重載=號vector<int> v3;v3 = v2;cout << "v1" << endl;PrintVector(v1);cout << endl<<"-------" << endl;int arr1[] = { 100,200,300,400 };vector<int> v4(arr1, arr1 + sizeof(arr1) / sizeof(int));v4.swap(v1); //將指針指向進行交換PrintVector(v1);PrintVector(v2);PrintVector(v3);PrintVector(v4); } /* 輸出: v1 10 20 30 40------- 100 200 300 400 10 20 30 40 10 20 30 40 10 20 30 40 *///大小操作 void test03() {int arr[] = { 10,20,30,40 };vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));cout << "size:" << v1.size() << endl;if (!v1.empty()) {cout << "v1 is not empty" << endl;}PrintVector(v1);v1.resize(2);PrintVector(v1);v1.resize(6);PrintVector(v1);v1.resize(8, 1);PrintVector(v1);for (int i = 0; i < 10000; i++){v1.push_back(i);}cout << "size:" << v1.size() << endl;cout << "capacity:"<<v1.capacity() << endl; //容量 } /* 輸出: size:4 v1 is not empty 10 20 30 40 10 20 10 20 0 0 0 0 10 20 0 0 0 0 1 1 size:10008 capacity:12138 *///存儲數(shù)據(jù) void test04() {int arr[] = { 10,20,30,40 };vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));for (int i = 0; i < v1.size(); i++){cout << v1[i] << endl; //不拋異常}for (int i = 0; i < v1.size(); i++){cout << v1.at(i) << endl; //拋異常}//front第一個元素 back最后一個元素cout << "第一個元素front:" << v1.front() << endl;cout << "最后一個元素back:" << v1.back() << endl; } /* 輸出: 10 20 30 40 10 20 30 40 第一個元素front:10 最后一個元素back:40 *///插入和刪除 void test05() {vector<int> v;v.push_back(10);v.push_back(20);v.insert(v.begin(), 30);v.insert(v.end(), 50);v.insert(v.begin() + 2, 1000);//vector容器支持隨機訪問//支持?jǐn)?shù)組下標(biāo)訪問,支持隨機訪問//迭代器可以直接+2 +3 -2等操作PrintVector(v);v.erase(v.begin());PrintVector(v);v.erase(v.begin() + 1, v.end());PrintVector(v);v.clear();cout << "size:" << v.size() << endl;} /* 輸出: 30 10 1000 20 50 10 1000 20 50 10 size:0 */ //巧用swap縮減空間 void test06() {//vector 添加元素 自動增長 刪除元素 不會自動減少vector<int> v;for (int i = 0; i < 10000; i++) {v.push_back(i);}cout << "size:" << v.size() << endl;cout << "capacity:" << v.capacity() << endl; //容量v.resize(10);cout << "=----------------" << endl;cout << "size:" << v.size() << endl;cout << "capacity:" << v.capacity() << endl; //容量//收縮空間// 1 vector<int>為匿名對象,// 2 vector<int>(v)用v去初始化匿名對象,會根據(jù)他自己大小去初始化自己// 3 vector<int>(v).swap(v) v與匿名對象交換內(nèi)存指向,將匿名對象銷毀vector<int>(v).swap(v);cout << "=----------------" << endl;cout << "size:" << v.size() << endl;cout << "capacity:" << v.capacity() << endl; //容量} /* 輸出: size:10000 capacity:12138 =---------------- size:10 capacity:12138 =---------------- size:10 capacity:10 */ int main() {cout << "-------------test01--------------" << endl;test01();cout << "-------------test02--------------" << endl;test02();cout << "-------------test03--------------" << endl;test03();cout << "-------------test04--------------" << endl;test04();cout << "-------------test05--------------" << endl;test05();cout << "-------------test06--------------" << endl;test06(); }?
總結(jié)
以上是生活随笔為你收集整理的STL9-vector容器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python docker_Docker
- 下一篇: TensorFlow12CIFAR-CN