+ -
当前位置:首页 → 问答吧 → 关于vector迭代器判断是否想等的问题

关于vector迭代器判断是否想等的问题

时间:2011-11-28

来源:互联网

struct EdsSmsRefTable_t
{
EdsSmsRefTable_t(DWORD dwRadioIssi)
{
dwIssi = dwRadioIssi;
}
DWORD dwIssi;
};
int _tmain(int argc, _TCHAR* argv[])
{
vector<EdsSmsRefTable_t> a;
  vector<EdsSmsRefTable_t> b;
 
a.push_back(EdsSmsRefTable_t(10));
vector<EdsSmsRefTable_t>::iterator begin = a.begin();
 
if (begin == b.begin())
{
cout<<"=="<<endl;
}
cout<<"end"<<endl;
getchar();
return 0;
}
这段代码为啥在vs 2003上运行没问题,在vs 2005上在执行if (begin == b.begin())会出现断言错误。

谢谢你的到来!~

作者: ywwzq0507   发布时间: 2011-11-28

你Debug一下就可以找到原因了呀。
是因为在VC2003中iterator重载了==运算符.

bool operator==(const _Myt& _Right) const
{
 #if _HAS_ITERATOR_DEBUGGING
_Compat(_Right);
 ...
}
而其中:
void _Compat(const _Myt& _Right) const
{
  if (this->_Mycont == 0 || this->_Mycont != _Right._Mycont)
{
_DEBUG_ERROR("vector iterators incompatible"); 
_SCL_SECURE_INVALID_ARGUMENT;
}
}

相反在VC6.0中没有对iterator==重载,所以比较的是iterator值.所以就没有问题.

楼主现在应该明白了吧.

作者: yuucyf   发布时间: 2011-11-28