我有一个像这样的Vector stuct:
struct Vector {
float x, y, z;
Vector( ) {
x = y = z = 0;
}
Vector(float x0, float y0, float z0 = 0) {
x = x0; y = y0; z = z0;
}
}
我创造了一个新的向量 - >矢量v [5]; 我用数字填充了这个数组,但我想清除它。
我试过这个:v = Vector();但它不起作用。 (我想调用Vector的默认构造函数,它将清除我的数组?)
或唯一的解决方案是通过for循环逐个清除?
答案 0 :(得分:4)
您不需要for
循环:
Vector v[5];
// ...
std::fill(std::begin(v), std::end(v), Vector()); // clears v.
答案 1 :(得分:2)
如果你写:
Vector v [5];
程序只在内存中分配5个连续的Vector对象。您可以使用[]运算符从一个切换到另一个,但是' v'不是数组对象。
如果要将所有数据重置为0,就像在构造函数中一样,您必须手动遍历所有元素:
for (int i = 0; i < 5; ++i)
v[i] = Vector();
或更好:
for (int i = 0; i < 5; ++i)
v[i].reset();
其中reset()将是Vector的成员,它负责将值设置为0,就像构造函数一样(它更有效,因为它不构造新对象)。
如果你有一个不同大小的数组,你可能更喜欢使用std :: vector。您还可以使用std :: fill()和其他算法。
std::vector<Vector> v;
v.resize(5);
std::fill(std::begin(v), std::end(v), Vector()); // clears v
答案 2 :(得分:1)
Vector v[5];
没有声明一个新的vector实例,它声明一个包含五个向量的数组。您不能将单个矢量分配给矢量数组。
您可以遍历数组并为每个元素分配一个默认构造的对象:
for (Vector& i : v)
i = Vector();
如果您不使用C ++ 11,可以采用传统方式:
for (int i = 0; i < 5; ++i)
v[i] = Vector();