如何构造一个包含成员函数的deque类?C++

如何构造一个包含成员函数的deque类?C++,c++,function,class,vector,deque,C++,Function,Class,Vector,Deque,下面是我到目前为止所做的 我的问题是:如何构造一个函数并使其工作?例如,如何在这里创建push_frontint函数?实际上不必使用模板,使用int完全可以 只有一个例子就足以让我知道下一步该怎么做 非常感谢你的帮助 #ifndef CLASSES_H #define CLASSES_H #include <vector> #include <iostream> class Deque{ public: void push_front(int); //Inser

下面是我到目前为止所做的

我的问题是:如何构造一个函数并使其工作?例如,如何在这里创建push_frontint函数?实际上不必使用模板,使用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::pop_front(){
    m_Vector.front() = std::move(m_Vector.back());
    m_Vector.pop_back();
}
“推前”在向量上的效率非常低,您通常应该避免它。你必须移动向量的每一个元素

假设你有左m_和右m_,我假设你的教授希望你在向量中做一个循环缓冲区。这根本不涉及push_back或任何类似函数,因为实际数据值可能是整体数据的某个子集,数据的前后可能位于任意索引,而不一定是向量的结尾

不过,一旦实现了Deque的功能,您的堆栈和队列看起来就很好了

研究循环缓冲区作为一个主题,有很多在线解释它们是如何工作的,对于许多工作负载,它们在单个操作基础上的效率要高得多,但它们的空间使用和更昂贵的访问有着奇怪的特性,因此在vector中没有作为默认值提供


对于这4种方法,我建议您花点时间举例,尤其是在边界条件方面。

是否指示您使用vector作为基础数据存储?是的,我在google上了解了一些有关vector的基本信息。感谢您回答我的问题。Push_front/Back和pop_front/Back功能也是我的教授要求的。我知道“推前”的效率很低,但我必须创建一个这样工作的函数。@XinzeWang:将它们命名为相同的名称会让人感到困惑。你的推回不一定要使用向量的推回。vector.push_back无效,您的不需要。有一些方法可以通过改变你在向量中处理数据的方式来提高它的效率,比如单独使用向量作为数据存储机制。我明白你的意思了。不过,在这个项目中,效率并不是我真正关心的问题之一。我会尝试在我首先完成整个事情后进行更改,但thx:
void Deque::pop_front(){
    m_Vector.front() = std::move(m_Vector.back());
    m_Vector.pop_back();
}