泛型演算法:比較兩個序列匹配演算法mismatch()
阿新 • • 發佈:2021-01-12
技術標籤:c++標準庫中的演算法
equal()演算法也能判斷兩個序列是否相等,不過只能判斷是否相等不能獲取不相等的位置。泛型演算法:判斷序列相等演算法equal()
mismatch()進行兩個序列比較,返回pair的值分情況是不同的:
1、兩個序列的值不匹配:pair的first是序列1的第一個不匹配的元素,second是序列2的第一個不匹配的元素:
QStringList list1; list1<<"aa"<<"bb"<<"cc"<<"dd"<<"aa"<<"ab"<<"ac"<<"bb"<<"cc"<<"dd"<<"aa"; QStringList list2; list2<<"aa"<<"cc"<<"tt"; std::pair<QStringList::iterator,QStringList::iterator> result = std::mismatch(list1.begin(),list1.end(),list2.begin()); qDebug()<< *result.first<<*result.second;
2、兩個序列相等,返回的是兩個序列的尾迭代器(如果是整個序列參與比較):
QStringList list2; list2<<"aa"<<"cc"<<"tt"; QStringList list3; list3<<"aa"<<"cc"<<"tt"; auto result2 = std::mismatch(list2.begin(),list2.end(),list3.begin()); qDebug()<< (result2.first == list2.end()) << (result2.second == list3.end());
3、如果序列1是序列2的真子集,返回的是序列1的尾迭代器和序列2中多出來的第一個元素:
QStringList list2; list2<<"aa"<<"cc"<<"tt"; QStringList list3; list3<<"aa"<<"cc"<<"tt"<<"ee"; auto result2 = std::mismatch(list2.begin(),list2.end(),list3.begin()); qDebug()<< (result2.first == list2.end()) << (result2.second == list3.end()); qDebug()<< (result2.first == list2.end()) << (*result2.second);
4、如果序列2是序列1的真子集,會報錯,因為演算法要求序列2的元素個數大於等於序列1的元素個數。