如何在其中构造一个带有成员函数的双端队列类? C++
Posted
技术标签:
【中文标题】如何在其中构造一个带有成员函数的双端队列类? C++【英文标题】:How to construct a deque class w/ member functions in it? C++ 【发布时间】:2017-01-24 22:31:21 【问题描述】:我是 C++ 新手,我的教授要求我们构建一个 Deque 类以及其他几个类,例如 Stack 和 Queue。
以下是我到目前为止所做的。
我的问题是:如何构造/制作一个函数并使其工作?例如,你怎么能在这里创建一个 push_front(int) 函数? (其实不用模板,用int就可以了。)
只有一个例子就足以让我弄清楚下一步该做什么。
非常感谢帮助。
#ifndef CLASSES_H
#define CLASSES_H
#include <vector>
#include <iostream>
class Deque
public:
void push_front(int); //Insertion from left
void push_back(int x)m_Vector.push_back(x);;//Insertion from right
void pop_front();//Remove from left
void pop_back()m_Vector.pop_back();;//Remove from right
int getL()const return m_left;
int getR()const return m_right;
protected:
//Protected Data members
int m_left;
int m_right;
unsigned int size;
unsigned int length;
vector<int> m_Vector;
//structure
;
// Deque member functions definitions
class Queue:private Deque
public:
void insertL(int a)push_front(a);;
int removeR()return pop_back();;
;
class Stack:private Deque
public:
void push(int x)push_front(x);;
int pop()return pop_front();;
bool full()return m_left == m_right;
protected:
using Deque::m_left;
using Deque::m_right;
;
#endif /* CLASSES_H */
更新:
我只是做了一个这样的小功能,
void Deque::push_front(int x)
m_Vector.insert(m_Vector.begin(),x);
我把它放在 Deque 类之后。有人能告诉我我做得对吗?
第二次更新:
我的 pop_front 是这样完成的。
void Deque::pop_front()
m_Vector.front() = std::move(m_Vector.back());
m_Vector.pop_back();
【问题讨论】:
是否指示您使用vector
作为基础数据存储?
是的,我在 google 上了解了一些有关矢量的基本信息。
【参考方案1】:
push_front
在vector
上的效率非常低,您通常应该避免使用它。 (您必须移动向量的每个元素才能做到这一点)。
鉴于您有m_left
和m_right
,我假设您的教授希望您在向量中创建一个循环缓冲区。这根本不涉及push_back
或任何类似函数,因为实际数据值可能是整体数据的某个子集,并且数据的正面和背面可能位于任意索引处,不一定是vector
的结尾.
你的Stack
和Queue
看起来不错,一旦你实现了Deque
的功能。
将循环缓冲区作为一个主题进行研究,网上有很多解释它们是如何工作的,对于许多工作负载而言,它们在单个操作的基础上效率要高得多,但在空间使用方面具有奇怪的属性,而且访问成本更高,因此不提供向量中的默认值。
我建议您在这 4 种方法方面花时间举例说明,尤其是在边界条件方面。
【讨论】:
感谢您回答我的问题。我的教授也需要push_front/back
和pop_front/back
函数。我知道push_front
效率低下,但我只需要创建一个以这种方式工作的函数。
@XinzeWang:将它们命名相同会造成混淆。您的push_back
不必使用矢量的push_back
。 vector.push_back
效率低下,你的不需要。有一些方法可以通过单独使用 vector
作为数据存储机制来改变您在 vector
中处理数据的方式来提高效率。
我明白你的意思。不过,效率并不是我在这个项目中真正关心的问题之一。在我先完成整个事情后,我会尝试更改它,但是谢谢 :))以上是关于如何在其中构造一个带有成员函数的双端队列类? C++的主要内容,如果未能解决你的问题,请参考以下文章
Python 类型提示填充了 myclass 对象的双端队列
C ++:如何在派生类中定义基类构造函数,如果基构造函数具有带有私有成员的初始化列表[重复]