2016-03-03 3 views
-1
template <typename T> 
bool operator==(const Stack<T>& a, const Stack<T>& b) 

я должен реализовать стек ADT с использованием STL (я выбрал вектор)перегружающие == для класса стека с использованием векторов

У меня возникли проблемы перегружать эту глобальную функцию, не являющихся членами. У меня есть вектор в частном разделе, и я хотел сравнить каждый элемент, всплывая и проверяя вершину, чтобы убедиться, что они равны, однако я не могу этого сделать, потому что стеки являются константами. Может кто-нибудь, пожалуйста, направит меня в правильном направлении?

+0

Не 'pop'. 'Peek'. – user4581301

+0

Должна ли быть глобальная функция? Если нет, просто реализуйте функцию-член и вручную проверяйте элементы, не выбирая ничего? –

+2

Можно также объявить функцию «другом» 'Stack', а затем сравнить« векторы »напрямую. – user4581301

ответ

1

Почему вы не используете operator== на объектах данных std::vector? Все, что вам нужно, это объявление :

template<typename T> class Stack { 
    /* The following allows operator== to use private members */ 
    friend bool operator==(const Stack&, const Stack&); 
    public: /* ... */ 
    private: 
    std::vector<T> data_; 
}; 

template<typename T> 
bool operator==(const Stack& a, const Stack& b) { 
    return a.data_ == b.data_; 
} 
+0

Или вы можете определить 'operator ==' как функцию-член. Есть некоторые странности, когда вы это делаете (о которых я никогда не помню подробностей), но вы также можете определить какое-то другое имя метода как функцию-член, а затем вызвать это из не-члена 'operator =='. Нет ничего плохого в использовании «друга», конечно, просто перечисление альтернатив. – Steve314

+1

@ Steve314: OP включал нужный прототип, который явно является функцией, не являющейся членом. И функция, не являющаяся членом, является лучшим решением, которое, по-видимому, предполагает, что профессор предложил прототип. (Обсуждение на http://stackoverflow.com/questions/4622330/operator-overloading-member-function-vs-non-member-function; возможно, есть и другие.) – rici

+0

В OP явно не указано, что профессор предоставил прототип , хотя, возможно, это и подразумевается. Тем не менее, я только утверждал, что есть альтернативы. Изучение C++ не означает, что ваш учитель будет счастлив. – Steve314