如何构建一个带有成员函数的deque类? C ++

时间:2017-01-24 22:31:21

标签: c++ function class vector deque

我是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();
}

1 个答案:

答案 0 :(得分:1)

push_frontvector m_left上是非常无能为力的,你通常应该避免它。 (你必须移动矢量的每个元素才能完成它。)

鉴于您有m_rightpush_back,我会假设您的教授希望您在向量中制作循环缓冲区。这根本不涉及vector或任何类似的功能,因为实际数据值可能是整体数据的一部分,数据的正面和背面可能是任意索引,不一定是{的结尾{1}}。

您的StackQueue看起来很好,一旦您实现了Deque的功能。

研究循环缓冲区作为主题,有很多在线解释它们是如何工作的,它们在许多工作负载的单独操作基础上效率更高,但在空间使用方面具有奇怪的属性,而且访问成本更高,因此不是在vector中作为默认值提供。

对于这4种方法,我建议您花时间学习一些例子,特别是在边界条件方面。