很抱歉这个问题,我一直在做Python和JS太多了,现在回到C ++来分配一个数组。
如何做到比这更容易:
float* d1 = (float*)calloc(4,sizeof(float));
d1[0] = 1;
d1[1] = 2;
d1[2] = 3;
d1[3] = 4;
我已经习惯了d1 = [1,2,3,4]
,无法绕过它......
答案 0 :(得分:5)
我看到以下用于创建float
s。
选项1
使用常规数组。
float d1[] = {1.0f, 2.0f, 3.0f, 4.0f};
或
float d1[4] = {1.0f, 2.0f, 3.0f, 4.0f};
选项2
使用std::array
。
std::array<float, 4> d1{1.0f, 2.0f, 3.0f, 4.0f}
选项3
使用std::vector
。
std::vector<float> d1{1.0f, 2.0f, 3.0f, 4.0f}
除非有充分理由,否则请使用std::array
或std::vector
。如果在编译时知道数组的大小,std::array
是合适的。如果您在编译时不知道数组的大小,std::vector
是合适的。
使用std::array
或std::vector
的一个主要好处是,您可以在函数调用中使用变量时找出数组的大小。如果使用常规数组,则数组衰减为指针。您必须在另一个参数中传递大小以帮助该函数阻止使用越界索引访问该数组。
答案 1 :(得分:1)
尝试使用此代码:
float array[] = {1.0f,2.0f,3.0f,4.0f};
此代码创建一个包含4个元素的简单数组。初始化时,数组是以下内容:1,2,3,4
。希望这可以帮助 。
答案 2 :(得分:0)
如果值在编译时已知
float d1[4] = {1.0f, 2.0f, 3.0f, 4.0f};
或
std::array<float, 4> d1 {1.0f, 2.0f, 3.0f, 4.0f}; // since C++11
简单的方法是,假设值是在运行时生成的,
std::array<float, 4> d1; // or float d1[4]
for (int i = 0; i < 4; ++i) d1[i] = i+1.0f;
// or, instead of the loop, since C++11
std::iota(std::begin(d1), std::end(d1), 1.0f); // iota() specified in <numeric>
或(如果在运行时之前不知道元素的数量)
std::vector<float> d1(number);
for (int i = 0; i < number; ++i) d1[i] = i+1.0f;
// or, instead of the loop, since C++11
std::iota(d1.begin(), d1.end(), 1.0f);