日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STL9-vector容器

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STL9-vector容器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

vector容器 動態數組 可變數組

vector容器 單口容器

vector實現動態增長:
???? 當插入新元素時,如果空間不足,那么vector會重新申請更大內存空間(默認二倍),將原空間數據拷貝到新空間,釋放舊空間的數據,再把新元素插入新申請空間。

當我們知道我們存儲的元素大概有多少時,使用reserve方法,減少vector重新申請內存-拷貝數據-釋放舊空間的次數

#include<iostream> #include<vector> using namespace std; void test01() {vector<int> v;int* p=NULL;int count = 0; //統計vector容量增長次數for (int i = 0; i < 100000; i++){v.push_back(i);if (p != &v[0]) {p = &v[0]; //內存首地址發生變化,申請新內存count++;}}cout << count << endl; } void test02() {vector<int> v;v.reserve(100000);int* p=NULL;int count = 0; //統計vector容量增長次數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; //默認構造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 *///存儲數據 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容器支持隨機訪問//支持數組下標訪問,支持隨機訪問//迭代器可以直接+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去初始化匿名對象,會根據他自己大小去初始化自己// 3 vector<int>(v).swap(v) v與匿名對象交換內存指向,將匿名對象銷毀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(); }

?

總結

以上是生活随笔為你收集整理的STL9-vector容器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。