[英]Append and clear for a list c++
我正在尝试实现两种方法append()
和clear()
。
在appened()
,我需要newPoint
到列表的末尾。 如果列表为空,则将newPoint添加为列表中的第一个(也是唯一的)点。
在clear()
,我需要删除列表中的所有点。
你能给我一些建议以实现appened and clear
。 这是一个代码:
//
#pragma once
const int maxListSize = 10;
class Point
{
private:
float x;
float y;
public:
Point(float x0 = 0, float y0 = 0)
{
x = x0;
y = y0;
}
};
class PointList
{
private:
//Data members
int size;
int cursor;
Point points[maxListSize];
public:
PointList();
//List Manipalution operations
void append(Point newPoint);
void clear();
~PointList();
};
*我不需要您为我编写所有内容,只需给我一些建议即可。 我想一个人实现。 感谢您的帮助。
由于您按值存储列表元素( Point points[maxListSize]
),因此很容易做到:
PointList() :size(0) {}
void append(Point newPoint) { points[size++] = newPoint; }
void clear() { size = 0; }
假定您的Point
对象不管理任何资源,这对于此特定示例而言是正确的。 否则,应彻底销毁插入的Point对象。
为了获得可能期望添加新项目并清除现有项目的语义,建议您查看place new操作符,并手动调用列表中项目的析构函数。
当前,当您创建列表时,您的班级将构造列表中的所有项目。 对于复杂的结构,这可能会非常耗时。 然后,您将不再调用元素的构造函数,而是调用copy-assignment运算符,因为这些项已经被构造。
如果将数组存储为
char * points[sizeof(Point)*maxListSize];
任何人仅在实际添加项目时才对其进行初始化,因此可以避免在创建列表时产生的建设成本。
您的append函数按值接受参数。 相反,我建议您有两个附加函数。 一个使用const&,另一个使用rvalue-reference。 然后,在append函数内部,在数组中下一个位置的地址上调用placement new运算符。
要清除数组,只需一次为数组中的每个元素调用析构函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.