附加并清除列表C

Append and clear for a list c++

本文关键字:列表 清除      更新时间:2023-10-16

我正在尝试实现两个METHDS 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对象没有管理任何资源,这对于此特定示例是正确的。否则,应清除插入点对象。

获取可能期望附加新项目并清除现有项目的语义,我建议您查看新的新操作员,并手动调用项目的destuructor在列表中。

当前,当您创建列表时,您的班级将构建列表中的所有项目。对于复杂的结构来说,这可能很耗时。然后,随着项目已经构造,您将调用复制分配运算符,而不是为您所调用的元素构造函数。

如果您将数组存储为

char * points[sizeof(Point)*maxListSize];

任何仅在实际添加的项目中初始初始初始初始化的,您可以避免创建列表时的施工成本。

您的附录函数按值逐值。相反,我建议您有两个附录功能。一个采用const&,另一种是获得rvalue-reference。然后,在附加功能中,在数组中下一个位置的地址上调用位置新操作员。

要清除数组,一个简单地调用数组中每个元素的击曲线。