C++标准库|std::equal 用法

描述:
比较两个容器中的元素是否完全相等。
定义:

template< class InputIt1, class InputIt2 > bool equal( InputIt1 first1, InputIt1 last1, InputIt2 first2 ); template< class InputIt1, class InputIt2 > constexpr bool equal( InputIt1 first1, InputIt1 last1, InputIt2 first2 );

template< class InputIt1, class InputIt2, class BinaryPredicate > bool equal( InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPredicate p ); template< class InputIt1, class InputIt2, class BinaryPredicate > constexpr bool equal( InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPredicate p );

template< class InputIt1, class InputIt2 > bool equal( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2 ); template< class InputIt1, class InputIt2 > constexpr bool equal( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2 );

template< class InputIt1, class InputIt2, class BinaryPredicate > bool equal( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, BinaryPredicate p ); template< class InputIt1, class InputIt2, class BinaryPredicate > constexpr bool equal( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, BinaryPredicate p );

可能的实现:
template bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2) { for (; first1 != last1; ++first1, ++first2) { if (!(*first1 == *first2)) { return false; } } return true; }

template bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPredicate p) { for (; first1 != last1; ++first1, ++first2) { if (!p(*first1, *first2)) { return false; } } return true; }

template bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2 ) { if (distance(first1,last1) != distance(first2,last2) return false; for (; first1 != last1, first2 != last2; ++first1, ++first2) { if (!(*first1 == *first2)) { return false; } } return true; }

template< class InputIt1, class InputIt2, class BinaryPredicate > bool equal( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, BinaryPredicate p ) { if (distance(first1,last1) != distance(first2,last2) return false; for (; first1 != last1, first2 != last2; ++first1, ++first2) { if (!p(*first1, *first2)) { return false; } } return true; }

参数:
first1, last1 - 进行比较的第一个范围
first2, last2 - 进行比较的第二个范围
p - 若元素应被当做相等则返回 ?true 的二元谓词。
返回值:
如果范围 [first1, last1) 的长度不等于范围 [first2, last2) 的长度则返回 false 。
如果两个范围内的元素都相等,则返回 true 。否则返回 false 。
【C++标准库|std::equal 用法】示例:
#include #include int main() { std::vector vec1; vec1.push_back(1); vec1.push_back(2); vec1.push_back(3); std::vector vec2; vec2.push_back(1); vec2.push_back(2); vec2.push_back(3); //注意: //1、比较容器1的3个元素与容器2的三个元素,判断是否完全相等 //2、容器2的元素必须大于等于3 bool bRt = std::equal(vec1.begin(), vec1.end(), vec2.begin()); std::cout << bRt << std::endl; //1 }

#include #include struct SData { int m_nData; SData(int nData) { m_nData = https://www.it610.com/article/nData; } }; int main() { std::vector> vec1; vec1.push_back(SData(1)); vec1.push_back(SData(2)); vec1.push_back(SData(3)); std::vector> vec2; vec2.push_back(SData(1)); vec2.push_back(SData(2)); vec2.push_back(SData(1)); //注意: //1、比较容器1的3个元素与容器2的三个元素,判断是否完全相等 //2、容器2的元素必须大于等于3 bool bRt = std::equal(vec1.begin(), vec1.end(), vec2.begin(), [](const SData& obj1, const SData& obj2) {return obj1.m_nData =https://www.it610.com/article/= obj2.m_nData; }); std::cout << bRt << std::endl; //1 }

#include #include int main() { std::vector vec1; vec1.push_back(1); vec1.push_back(2); vec1.push_back(3); std::vector vec2; vec2.push_back(1); vec2.push_back(2); vec2.push_back(3); //注意: //1、比较容器1的3个元素与容器2的三个元素,判断是否完全相等 //2、容器2的元素必须大于等于3 bool bRt = std::equal(vec1.begin(), vec1.end(), vec2.begin(),vec2.end()); std::cout << bRt << std::endl; //1 }

#include #include struct SData { int m_nData; SData(int nData) { m_nData = https://www.it610.com/article/nData; } }; int main() { std::vector> vec1; vec1.push_back(SData(1)); vec1.push_back(SData(2)); vec1.push_back(SData(3)); std::vector> vec2; vec2.push_back(SData(1)); vec2.push_back(SData(2)); vec2.push_back(SData(1)); //注意: //1、比较容器1的3个元素与容器2的三个元素,判断是否完全相等 //2、容器2的元素必须大于等于3 bool bRt = std::equal(vec1.begin(), vec1.end(), vec2.begin(),vec2.end(), [](const SData& obj1, const SData& obj2) {return obj1.m_nData =https://www.it610.com/article/= obj2.m_nData; }); std::cout << bRt << std::endl; //1 }

    推荐阅读