2011-10-26 46 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);