如何在C++中清除Vector?(不是std::vector)
How to clear Vector in C++?(not std::vector)
我有一个矢量结构,如下所示:
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();
相关文章:
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- std::to_string - 'to_string' 不是 'std' 的成员 - Visual Studio Code 1.42.0
- FreeFileSync C++错误:'byte'不是 'std' 的成员
- 使用 std::addressof(std::cout) 而不是 &std::cout 是否有任何风险?
- 隐式转换为比较函数对象(函子)用于 std::sort 而不是 std::map?
- 无法从好友功能访问类的私有成员?"ostream"不是"std"的成员?
- 线程不是 std c++ 的成员
- 为什么会出现错误:size不是std的成员
- 读取互斥对象范围之外的volatile变量,而不是std::atomic
- 不是 'std::vector<_Ty> 的成员
- C++ GCC 错误:"sqrtl"不是"std"的成员
- _Pairib":不是"std::map,std::分配器"的成员>>
- 如何将 std::list of 派生类而不是 std::list of parent class 传递给函数
- 'make_unique'不是'std'的成员
- "random_shuffle":不是"std"错误的成员
- 为什么错误:"locate_zone"不是"std::chrono"的成员
- 为什么 std::when_any 使用 std::tuple 而不是 std::vector 作为其结果类型?
- "<某些系统标头>:错误:"<在此处插入函数>"在移动源文件后不是"std"的成员
- Clang希望我写:: STD :: Declval而不是STD :: Declval
- 哈希输出为 BYTE 而不是 std::string