1. 程式人生 > 其它 >vector用法的易錯點

vector用法的易錯點

技術標籤:演算法筆記

vector用法的易錯點

1.push_back() 是在容器末尾插入元素

pus_back()在插入時容量會自動增加,不考慮溢位

vectornum(5);
// 初始化int型的容器,容量是5,初試值是0
cout<<num;
/ / 輸出 0 0 0 0 0
num.push_back(1);num.push_back(2);
cout<<num;
//輸出 0 0 0 0 0 1 2

2.push_back()方法向vector存入元素與先確定vector大小,再利用陣列下標存放——二者的時間分析

第一種方法,用push_back()方法加入物件,

加入一個物件都要檢查容器內部維護的記憶體是否夠用,不夠用的話需要重新申請記憶體,花費大量時間;

第二種方法是先確定容器大小,然後用【】陣列的方式加入物件。

第二種方法則是起初確定記憶體大小按順序加入物件,節省大量時間。

3.resize()與reserve()的區別,很重要

3.1 size元素個數與capacity容量區別

capacity 指容器在分配新的儲存空間之前能儲存的元素總數。
size 指當前容器所儲存的元素個數

resize () 既分配了空間capacity,也建立了物件,元素。
reserve()表示容器預留空間,但不是真正的建立物件,需要通過insert()或push_back()等操作建立物件。

當然size()的使用頻率相當高,通常進行遍歷操作時,最外層的for迴圈的次數即為size()。

#include<vector>
#include<iostream>
using namespace std;
int main(){
	vector<int>v1;
	vector<int>v2;
	v1.resize(2);
	cout<<"v1.size()="<<v1.size()<<", v1.capacity()="<<v1.capacity()<<endl;
	v2.reserve(2);
	cout<<"v2.size()="
<<v2.size()<<", v2.capacity()="<<v2.capacity()<<endl; cout<<"v1="<<v1[0]<<" "<<v1[1]<<" "<<v1[2]<<endl; cout<<"v2="<<v2[0]<<" "<<v2[1]<<" "<<v2[2]<<endl; v1.push_back(1); cout<<v1[0]<<v1[1]<<v1[2]<<endl; v2.push_back(1); cout<<v2[0]<<" "<<v2[1]<<" "<<v2[2]<<endl; cout<<"v1.size()="<<v1.size()<<endl; cout<<"v2.size()="<<v2.size()<<endl; return 0; }

在這裡插入圖片描述
所以,v1.resize(2)把v1初始化了v1[0]=0,v1[1]=0
v1.push_back(1); 使v1[2] =1,v1.size()=3;
v2.reserve();後 v2.size()=0,所以v2[0],v2[1]…的值是隨機的,不確定的,未初始化的
v2.push_back(1);後v2.size()=1