繁体   English   中英

追加并清除列表C ++

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM