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

How to clear Vector in C++?(not std::vector)

本文关键字:不是 std vector Vector C++ 清除      更新时间:2023-10-16

我有一个矢量结构,如下所示:

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循环并逐个清除?

您不需要for循环:

Vector v[5];
// ...
std::fill(std::begin(v), std::end(v), Vector()); // clears v.

如果您编写:

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

Vector v[5];没有声明向量的新实例,它声明了一个由五个向量组成的数组。不能将单个向量指定给向量数组。

您可以循环遍历数组,并为每个元素分配一个默认构造的对象:

for (Vector& i : v)
  i = Vector();

如果你不使用C++11,你可以用老式的方法:

for (int i = 0; i < 5; ++i)
  v[i] = Vector();