安全地分配向量到向量<双>?

发布于 2024-12-11 20:31:16 字数 310 浏览 0 评论 0原文

为了初始化特定计算的变量,我必须从整数数组中为它们分配值。 所以我这样做:

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];

谢谢你的澄清!

To initialize variables for a certain computation I have to assign them values from an integer array.
So I do:

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

vd.assign(ai, ai+N);

This works under gcc 4.6.1 Linux. But is it always correct? Or should I return to the evergreen:

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

Thanks for clarifying!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

逆夏时光 2024-12-18 20:31:17

I think this is safe, since assign is a template. See http://www.cplusplus.com/reference/stl/vector/assign/. The implementation assigns doubles from ints, which basically is not different to your other solution. Checking the header in /usr/include/c++/4.6/bits/stl_vector.h it seems the constructer and assign both call the same internal function, _M_assign_dispatch.

丢了幸福的猪 2024-12-18 20:31:16

将进行隐式转换,因此是安全的。为什么不在构建期间初始化向量:

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

Implicit conversion will take place so it is safe. And why not initializing vector during its construction:

std::vector<double> vd(ai, ai + N);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文