最近在写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类型的容器要进行限定描述。
本文探讨了在实现STL中的Vector容器时遇到的相等性判断问题,特别是当两个Vector对象进行比较时如何正确处理const限定的问题,并提供了解决方案。
3647

被折叠的 条评论
为什么被折叠?



