c++ - 传递对 deque delete 函数的引用

标签 c++ deque circular-buffer

我接到了一项任务,我正在努力弄清楚我应该如何执行它。

我把作业中让我困惑的部分粘贴在下面

  1. 编写一个双端队列类来保存一个整数列表,该列表在内部使用循环数组实现。数组的大小可以在构造函数中传递,或者您可以决定一个默认值。该类将维护保存列表头部和尾部索引位置的数据成员 该类应具有成员函数:
    • bool isEmpty();
    • bool isFull();
    • bool insertFront(int)
    • bool removeFront(int&)
    • bool insertBack(int)
    • bool removeBack(int&)

  2. 打印数组中的所有项目,一次从前面删除一项。

所以我已经编写了所有函数并让双端队列正常工作,我遇到的问题是:

  1. “数组的大小可以在构造函数中传递” 所以为了实现这一点,我在我的类中声明了一个名为 array 的指针,然后在我的构造函数中声明了一个名为 array = new int[size] 的指针,这是唯一的方法吗,我很高兴它有效但不确定是否有更好的解决方案.我在考虑 vector ,但认为那太容易了。我也可以为大小声明一个 const 并在我的类中初始化数组,但同样很容易。

  2. bool removeFront(int&)bool removeBack(int&) 函数让我很困惑,我应该传入什么引用?返回类型也是 bool,但在稍后的作业中,我被要求“通过一次从前面删除一个来打印数组中的所有项目”我怎么能用 bool 的返回类型而不是 int 来做到这一点?

我已经更改了我的函数以删除引用并返回类型为 int 以使代码正常工作,但想知道如何按照分配要求的方式实现它?

最佳答案

根据列出的要求,函数参数的意图是明确的。原因如下:

bool removeFront(int& );

这不仅会删除缓冲区前面的元素并将其存储在通过引用传递的参数中。但是,该函数返回一个“ bool 值”,指示它是否能够成功删除。

示例用法如下:

int elem;
while (removeFront(elem)) {
   printf("element : %d ", elem);
}

这里通过引用传入变量“elem”。因此,在成功执行 removeFront() 后,您将使用刚刚删除的元素的值填充 elem。

同样的推理适用于其他类似的方法。请返回使用原始规范中给出的引用模式参数。

int& 参数并不像其他答案所建议的那样用于元素计数。

第 1 部分的答案:

您的解决方案非常不错。你也可以

std::array 用于存储元素。有一个高级技巧可以就地分配可变长度数组 - 但是,这超出了这个问题的范围。

关于c++ - 传递对 deque delete 函数的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27335598/

相关文章:

c# - 接收 : How to buffer events (ring buffer) and only flush them when a special event occurs?

c++ - 如何在 C++ 中的二维 vector 中查找 vector ?

c++ - 这个符号在C++中是什么意思? "~"

正则表达式中的 C++ 特殊字符

python - 将队列转储到python中的列表/数组中

c++ - C++ 中的通用循环缓冲区实现

c++ - 调用宏时参数太多

c++ - 移动 std::deque 后引用/指针是否保证有效?

c++ - 如何构造一个带有成员函数的双端队列类? C++

c++ - 迭代器,调用 end() 的结果值随着数据添加到circular_buffer而变化