STL queue源码中友元函数是干嘛的?
#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
template <class T, class Sequence = deque<T> >
#else
template <class T, class Sequence>
#endif
class queue
{
friend bool operator== __STL_NULL_TMPL_ARGS (const queue& x, const queue& y);
friend bool operator< __STL_NULL_TMPL_ARGS (const queue& x, const queue& y);
public:
// pointer, iterator, difference_type
typedef typename Sequence::value_type value_type;
typedef typename Sequence::size_type size_type;
typedef typename Sequence::reference reference;
typedef typename Sequence::const_reference const_reference;
protected:
Sequence c; // 这个是我们实际维护的容器
public:
bool empty() const { return c.empty(); }
size_type size() const { return c.size(); }
reference front() { return c.front(); }
const_reference front() const { return c.front(); }
reference back() { return c.back(); }
const_reference back() const { return c.back(); }
void push(const value_type& x) { c.push_back(x); }
void pop() { c.pop_front(); }
};
------解决方案--------------------这个是声明模板化的友元函数,这个操作符重载函数是全局的.
例如:
queue<int> _qa;
queue<int> _qb;
if( _qa == _qb) // 这个会调用全局重载操作符函数,声明友元后operator ==函数才可以访问queue<int>类的内部成员
...
else if( _qa < _qb)
...
其余的 != 和 > 之类的操作符逻辑都可以通过operator == 和 operator < 这两个操作符推断.
码字不易,给分吧
------解决方案--------------------重载操作符,可以让相同类型的dequeue进行比较。