如何在C ++中清除Vector?(不是std :: vector)

时间:2014-10-09 10:32:29

标签: c++ struct

我有一个像这样的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循环逐个清除?

3 个答案:

答案 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();