Vector的一些事

一、利用數組對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
請按任意鍵繼續. . .
相關文章
相關標籤/搜索