2012-03-01 71 views
0

有沒有一種標準的方式來實現這一點比for循環更好?從一個數組(指針)分配一個向量

如果我有一個數組類型supposedly我可以這樣做:

double d_array[] = { 1.0, 2.0, 3.0 }; 
std::vector<double> d_vector(d_array, d_array+3); 

但我不能做到這一點時,我只有一個double *int表明其長度。

編輯:其實,我認爲我其實可以做到這一點。但是,如果你的類型參數錯誤(這就是爲什麼它起初不適用於我)的錯誤信息是相當少的。

+0

你試過了嗎?你可以把它展示給我們嗎? – 2012-03-01 04:41:47

+0

它現在似乎工作。當試圖用錯誤匹配的類型做這件事時,錯誤信息是非常冗長的,儘管不是完全神祕。 – 2012-03-01 04:44:53

+0

你可能想看看這個問題http://stackoverflow.com/questions/231491/how-to-initialize-const-stdvectort-like-a-c-array – sank 2012-03-01 05:10:57

回答

2

當然你也可以做同樣的方式

int length; 
double *d; 
//allocate memory and data to pointer 
std::vector<double> d_vector(d, d+length); 
1

沒錯。你應該可以做到這一點。相關的構造函數是template <class InputIterator> vector (InputIterator first, InputIterator last, const Allocator& = Allocator()); - 指針也是迭代器(因爲你可以對它們進行整數運算)。這就是說,所有的矢量正在迭代d_array的元素,所以不要指望性能明顯好於for循環版本。

+0

它真的很酷,它能夠透明地使用這樣的指針。這**可以以任何方式具有比for循環版本更好的性能(雖然當然不是真的,因爲幼稚的for循環會導致向量調整自身)。無論如何,我喜歡這樣的事情,因爲它有助於減少錯誤。 – 2012-03-01 04:47:38

+0

它可能足夠聰明,減去兩個指針來找出它將循環多少個值,併爲它們分配足夠的空間。默認構建一個向量並自己插入值可能需要隨着向量的增長重新分配。 – Wyzard 2012-03-01 04:49:50

+0

沒錯,在我的天真實現中,我需要弄清楚我是否想要使用'resize'或'reserve' ...使用ctor或者指針指向是非常簡潔的。 – 2012-03-01 04:52:31

相關問題