有如下代碼:
#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);
}