// Using the equal() algorithm #include <iostream> // For standard streams #include <vector> // For vector container #include <algorithm> // For equal() algorithm #include <iterator> // For stream iterators #include <string> // For string class using std::string; int main() { std::vector<string> words1 {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; std::vector<string> words2 {"two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"}; auto iter1 = std::begin(words1); auto end_iter1 = std::end(words1); auto iter2 = std::begin(words2); auto end_iter2 = std::end(words2); std::cout << "Container - words1:"; std::copy(iter1, end_iter1, std::ostream_iterator<string>{std::cout, " "}); std::cout << "\nContainer - words2:"; std::copy(iter2, end_iter2, std::ostream_iterator<string>{std::cout, " "}); std::cout << std::endl; std::cout << "\n1. Compare from words1[1] to end with words2:"; std::cout << std::boolalpha << std::equal(iter1 + 1, end_iter1, iter2) << std::endl; std::cout << "2. Compare from words2[0] to second-to-last with words1:"; std::cout << std::boolalpha << std::equal(iter2, end_iter2 - 1, iter1) << std::endl; std::cout << "3. Compare from words1[1] to words1[5] with words2:"; std::cout << std::boolalpha << std::equal(iter1 + 1, iter1 + 6, iter2) << std::endl; std::cout << "4. Compare first 6 from words1 with first 6 in words2:"; std::cout << std::boolalpha << std::equal(iter1, iter1 + 6, iter2, iter2 + 6) << std::endl; std::cout << "5. Compare all words1 with words2:"; std::cout << std::boolalpha << std::equal(iter1, end_iter1, iter2) << std::endl; std::cout << "6. Compare all of words1 with all of words2:"; std::cout << std::boolalpha << std::equal(iter1, end_iter1, iter2, end_iter2) << std::endl; std::cout << "7. Compare from words1[1] to end with words2 from first to second-to-last:"; std::cout << std::boolalpha << std::equal(iter1 + 1, end_iter1, iter2, end_iter2 - 1) << std::endl; }输出结果为:
Container - words1: one two three four five six seven eight nine
Container - words2: two three four five six seven eight nine ten
1.Compare from words1[1] to end with words2: true
2.Compare from words2[0] to second-to-last with words1: false
3.Compare from words1[1] to wordsl[5] with words2: true
4.Compare first 6 from words1 with first 6 in words2: false
5.Compare all wordsl with words2: false
6.Compare all of words1 with all of words2: false
7.Compare from words1[1] to end with words2 from first to second_to_last: true
std::cout << std::boolalpha << (words1 == words2) << " "; // false这两个版本的 equal() 接受一个谓词作为额外的参数。这个谓词定义了元素之间的等价 比较。下面是一个说明它们用法的代码段:
std::vector<string> r1 { "three", "two", "ten"}; std::vector<string> r2 {"twelve", "ten", "twenty" }; std::cout << std::boolalpha<< std::equal (std::begin (r1) , std::end (r1) , std::begin (r2),[](const string& s1, const string& s2) { return s1[0] = s2[0]; })<< std::endl; // true std::cout << std::boolalpha<<std::equal(std::begin(r1), std::end(r1), std::begin(r2), std::end(r2),[](const string& s1, const string& s2) { return s1[0] == s2[0]; }) << std::endl; // true在 equal() 的第一次使用中,第二个序列是由开始迭代器指定的。谓词是一个在字符串 参数的第一个字符相等时返回 true 的 lambda 表达式。最后一条语句表明,equal() 算法可以使用两个全范围的序列,并使用相同的谓词。
本文链接:http://task.lmcjl.com/news/16882.html