vector的自增長問題

有如下代碼:

#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;

int fun (vector<int>&val){
	copy(val.begin(),val.end(),ostream_iterator<int>(cout,"\n"));
	return 1;
}

void main(){
	int a[5]={1,2,3,4,5};
	vector<int> v;//此處未設置v的初始大小,寄希望於vector自己處理容量增加問題
	copy(a,a+5,v.begin());
	fun(v);
}

上述代碼發生運行時錯誤。問題出在v那裏,vector是可以自動增長沒錯,但是這個自動增長不是說隨便就可以的,它是有觸發條件的。一般,我們使用push_back函數向其中添加元素的時候會處理自動增長問題。這裏沒有觸發條件,所以試圖向一個沒有空間的vector中寫入5個元素,產生內存訪問錯誤。正確的修改如下所示:

#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;

int fun (vector<int>&val){
	copy(val.begin(),val.end(),ostream_iterator<int>(cout,"\n"));
	return 1;
}

void main(){
	int a[5]={1,2,3,4,5};
	vector<int> v(5);//此處未設置v的初始大小,寄希望於vector自己處理容量增加問題
	copy(a,a+5,v.begin());
	fun(v);
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章