假設我們有這樣的需求,那就是判斷兩個vector
--v1
, v2
是否相等,那么我們應該怎樣做呢?不急,我們先來追蹤一下vector
的源碼.
vector已經(jīng)實現(xiàn)了operator==
這個函數(shù),也就是說它已經(jīng)重載了==
這個操作.
template<class _Ty,
class _Alloc> inline
bool operator==(const vector<_Ty, _Alloc>& _Left,
const vector<_Ty, _Alloc>& _Right)
{ // test for vector equality
return (_Left.size() == _Right.size()
&& _STD equal(_Left.begin(), _Left.end(), _Right.begin()));
}
我們可以看得到,首先是判斷兩個vector
的大小是否相等,然后調(diào)用std的equal
函數(shù)來進行判斷.
equal
函數(shù)的實現(xiàn)大概是這個樣子的:
...
for ( ; first1 != last1; ++first1, ++first2)
if (*first1 != *first2)
return false;
return true;
...
代碼很簡單,上面的first1
以及last1
都是第一個vector
的起始和終止迭代器,first2
是第二個vector
的起始迭代器.代碼不過是比較兩個vector
相同位置上的值而已.
所以,如果vector是內(nèi)置類型的數(shù)據(jù),如int
, char
等,直接用v1 == v2
來判斷就可以了,但是如果你用了自定義類型的話,那么首先,你要實現(xiàn)該類型的operator==
函數(shù),也就是重載等于判斷.