2017-01-24 2 views
0

저는 C++을 처음 접했고 교수님께서는 Deque 클래스와 Stack 및 Queue와 같은 몇 가지 클래스를 구성하라고했습니다.deque 클래스를 구성하는 방법/멤버 함수를 생성하는 방법은 무엇입니까? C++

다음은 지금까지 내가 해왔 던 것입니다.

제 질문은 : 기능을 만들고/만드는 방법과 작동시키는 법? 예를 들어 여기에 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 */ 

는 UPDATE :

난 그냥

void Deque::push_front(int x){ 
    m_Vector.insert(m_Vector.begin(),x); 
} 

이런 작은 기능을 만들어 그리고 바로 양단 큐 클래스 이후에 넣어. 누군가 내가 제대로하고 있다고 말할 수 있습니까?

2 업데이트 :

나는 pop_front과 같이 수행되었다. 당신은 일반적으로 피해야한다

void Deque::pop_front(){ 
    m_Vector.front() = std::move(m_Vector.back()); 
    m_Vector.pop_back(); 
} 
+0

'벡터'를 기본 데이터 저장소로 사용하도록 지시 받았습니까? –

+0

예 벡터에 관한 기본 정보를 Google에서 배웠습니다. –

답변

1

push_frontvector에 믿을 수 없을만큼 inefficent입니다. (당신은 벡터의 모든 요소를 ​​움직여야한다.)

m_leftm_right을 감안할 때 나는 교수님이 당신의 벡터 내에서 원형 버퍼를 만들고 싶다고 가정합니다. 실제로는 push_back 또는 이와 유사한 함수가 포함되지 않습니다. 실제 데이터 값은 전체 데이터 집합의 일부 집합이 될 수 있으며 데이터의 앞면과 뒷면은 임의의 인덱스에있을 수 있습니다. 반드시 vector의 끝이 아닐 수도 있습니다.

귀하의 StackQueue은 잘 보이지만, 일단 Deque의 기능을 구현하면됩니다.

원형 버퍼를 주제로 연구하고 있습니다. 온라인 버퍼는 작동 방식을 충분히 설명합니다. 많은 작업 부하에 대해 개별 작업 단위에서 훨씬 효율적이지만 공간 사용량과 비용이 많이 드는 액세스가 제공되지 않으므로 이상한 속성을 갖습니다. 벡터의 기본값으로

특히 경계 조건과 관련하여 이러한 4 가지 방법과 관련하여 시간을 할애 해 보시기 바랍니다.

+0

제 질문에 답변 해 주셔서 감사합니다. 교수님은''앞/뒤''와''pop_front/back'' 함수도 필요합니다. 나는'push_front'가 비효율적이라는 사실을 알고 있습니다 만, 그런 식으로 작동하는 함수를 만들어야합니다. –

+1

@XinzeWang : 이름을 동일하게 지정하면 혼동이 생깁니다. 'push_back'은 반드시 벡터의'push_back'을 사용할 필요는 없습니다. 'vector.push_back'은 비효율적이며, 여러분의 필요는 없습니다. 데이터 저장 메커니즘만으로'vector'를 사용하여'vector' 내에서 데이터를 처리하는 방법을 변경함으로써 효율적으로 만드는 방법이 있습니다. – Guvante

+0

무슨 뜻인지 알았어. 효율성은 실제로이 프로젝트에서 내 관심사 중 하나가 아닙니다.나는 모든 일을 먼저 끝내고 나서 그것을 바꾸려고 노력할 것이다. 그러나 thx :)) –

관련 문제