最近在写STL,在对stack
的swap
函数进行测试的时候,出现了这个问题,由于是第一次见,我独自想了很久也有点迷糊,搜索调试弄了半天终于解决了,以下是出问题的代码:
template<class T, class Alloc>
bool vector<T, Alloc>::operator ==(const vector& rhs)const {
if (size() != rhs.size()) {
return false;
}
auto ptrLhs = this->start_;
auto ptrRhs = rhs.start_;
for (; ptrLhs != this->finish_ && ptrRhs != rhs.finish_; ++ptrLhs, ++ptrRhs) {
if (*ptrLhs != *ptrRhs)
return false;
}
return true;
}
问题就是出在 if (size() != rhs.size()) {
这一行
解决方法其实很简单,就是在size()
函数的后面针对const
的vector
加上一个对this
指针的const
限定就好了,如下:
size_type size()const { return end() - begin(); }
以后写容器的时候一定要注意针对const
类型的容器要进行限定描述。