2011-10-26 108 views
4

可能重複:
C++ convert vector<int> to vector<double>安全地將矢量<int>分配給矢量<double>?

初始化變量一定計算我必須分配它們的整數數組值。 所以我這樣做:

vector<double> vd; 
int ai[N]; // Filled somewhere else 

vd.assign(ai, ai+N); 

這工作在gcc 4.6.1 Linux下。但它總是正確的嗎?或者我應該回到常綠:

vd.resize(N); 
for(int i=0; i < N; ++i) vd[i] = (double)ai[i]; 

謝謝澄清!

+0

在[C-轉換-vectorint到vectordouble]已經回答(http://stackoverflow.com/questions/6399090/c-convert-vectorint-to- vectordouble)(爲什麼它不會出現在我的第一次搜索?神祕)。但這也是事實問題,這是有效的。 – mvalle

+0

我已經標記了你的問題,因爲它是重複的... – Nim

回答

0

我認爲這是安全的,因爲assign是一個模板。請參閱http://www.cplusplus.com/reference/stl/vector/assign/。實現從int中分配雙精度,這與您的其他解決方案基本上沒有區別。在/usr/include/c++/4.6/bits/stl_vector.h中檢查標題看起來似乎是constructer並且分配了兩個調用相同的內部函數,_M_assign_dispatch

3

隱式轉換將發生,因此它是安全的。它的建設過程中,爲什麼不初始化向量:

std::vector<double> vd(ai, ai + N);