一、利用數組對vector進行初始化方法html
固然有許多方法,這裏就講一種。緣由簡單,其餘方式請參見這個博文:http://www.cplusplus.me/1112.htmlios
int a[] = {-1, 1, 1, 1, -1}; vector<int> n(a, a+sizeof(a)/sizeof(int));
這裏面涉及指針的知識與sizeof的用法。數組
指針偏移 其實移動的是某一個類型大小的值。函數
特性3:sizeof能求得靜態分配內存的數組的長度!spa
Int a[10];int n = sizeof(a);指針
假設sizeof(int)等於4,則n= 10*4=40;code
特別要注意:charch[]=」abc」;sizeof(ch);htm
結果爲4,注意字符串數組末尾有’\0’!一般咱們能夠利用sizeof來計算數組中包含的元素個數,其作法是:int n = sizeof(a)/sizeof(a[0]);blog
很是須要注意的是對函數的形參數組使用sizeof的狀況。舉例來講,假設有以下的函數:內存
void fun(int array[10])
{
int n = sizeof(array);
}
你會以爲在fun內,n的值爲多少呢?若是你回答40的話,那麼我很遺憾的告訴你,你又錯了。這裏n等於4,事實上,無論形參是int的型數組,仍是float型數組,或者其餘任何用戶自定義類型的數組,也無論數組包含多少個元素,這裏的n都是4!爲何呢?緣由是在函數參數傳遞時,數組被轉化成指針了,或許你要問爲何要轉化成指針,緣由能夠在不少書上找到,我簡單說一下:假如直接傳遞整個數組的話,那麼必然涉及到數組元素的拷貝(實參到形參的拷貝),當數組很是大時,這會致使函數執行效率極低!而只傳遞數組的地址(即指針)那麼只須要拷貝4byte。
// Vector_Learning.cpp : 定義控制檯應用程序的入口點。 // #include "stdafx.h" #include <vector> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int int_array[] = {1, 2, 3, 4}; for(int i = 0; i < 4; i++) { cout << int_array[i]; } cout << endl; std::vector<int> vec_int(int_array, int_array+4); for(vector<int>::iterator ite_vec_int = vec_int.begin(); ite_vec_int != vec_int.end(); ite_vec_int++){ cout << *ite_vec_int; (*ite_vec_int)++; } cout << endl; for(vector<int>::iterator ite_vec_int = vec_int.begin(); ite_vec_int != vec_int.end(); ite_vec_int++){ cout << *ite_vec_int; } cout << endl; for(int i = 0; i < 4; i++) { cout << int_array[i]; } return 0; }
1234 1234 2345 1234 請按任意鍵繼續. . .