C语言equal(),C ++中的std :: equal()
equal()作為STL函數(shù)
語法:bool?equal(
InputIterator1?first1,
InputIterator1?last1,
InputIterator2?first2);
哪里,InputIterator1 first =迭代器,開始第一個序列范圍
InputIterator1 last1 =迭代器到第一個序列范圍的結(jié)尾
InputIterator2 first2 =迭代器開始第二個序列范圍
返回類型: boolTrue-如果兩個范圍內(nèi)的所有元素都相同
False-如果兩個范圍內(nèi)的所有元素都不相同
上面的語法用于使用標準==運算符比較元素。
我們還可以定義用戶定義的二進制謂詞(而不是'==')來檢查是否相等。用戶定義的二進制謂詞的語法如下:
(二元謂詞是一個帶有兩個參數(shù)并僅返回true或false的函數(shù)。)bool?equal(
InputIterator1?first1,
InputIterator1?last1,
InputIterator2?first2,
BinaryPredicate?pred);
使用上述語法,可以通過謂詞檢查相應(yīng)范圍的元素。
因此,我們發(fā)現(xiàn)第二個范圍的最后一個迭代器沒有共享,因為它只會比較范圍1相同數(shù)量的元素。而且,它將順序檢查,這意味著[1、3、5]和[5] ,, 3,1]不一樣。因此,兩個范圍的順序必須相同。
1)使用默認的'=='/'!='運算符#include?
using?namespace?std;
int?main(){
vector?arr1{?3,?2,?1,?4,?5,?6,?7?};
vector?arr2{?3,?2,?1,?4,?5?};
if?(equal(arr1.begin(),?arr1.begin()?+?5,?arr2.begin()))?{
cout?<
}
else
cout?<
vector?arr3{?1,?2,?3,?4,?5,?6,?7?};
vector?arr4{?1,?2,?3,?4,?5?};
if?(equal(arr3.begin(),?arr3.end(),?arr4.begin()))?{
cout?<
}
else
cout?<
return?0;
}
輸出:both?ranges?are?exactly?equal
both?ranges?are?not?exactly?equal
在上面的程序中,我們檢查了兩種情況,并使用了默認的比較器。在第一種情況下,
第一個范圍是arr1.begin()到arr1.begin()+ 5,即arr1的僅前五個元素。第二個范圍從arr2.begin()開始,它將僅從range2的開始檢查前五個元素。由于兩者相同,因此是匹配項。
[3,2,1,4,5]
在第二種情況下,由于我們使用了arr3的總范圍,因此這是不匹配的。
2)使用用戶定義的比較器功能
在這里,我們以一個用例為例,我們有兩個向量用于學生詳細信息,每個向量有五個學生。通過使用用戶定義的預測,我們將檢查兩個列表是否相等。如果每個學生的詳細信息都匹配,則兩個列表都相等。要使學生詳細信息匹配,所有詳細信息(名次,姓名,分數(shù))必須相同。#include?
using?namespace?std;
class?student?{
int?score;
int?roll;
string?name;
public:????student()
{
score?=?0;
roll?=?0;
name?=?"";
}
student(int?sc,?int?ro,?string?nm)
{
score?=?sc;
roll?=?ro;
name?=?nm;
}
int?get_score()
{
return?score;
}
int?get_roll()
{
return?roll;
}
string?get_name()
{
return?name;
}
};
bool?pred(student?a,?student?b)
{
//如果所有細節(jié)都相同,則返回true,否則返回false-
if?(a.get_name()?==?b.get_name()?&&?a.get_score()?==?b.get_score()?&&?a.get_roll()?==?b.get_roll())
return?true;
return?false;
}
int?main(){
//第一個列表
vector?arr1(5);
//第一名學生
arr1[0]?=?student(80,?5,?"XYZ");?//卷5,標記80-
//第二名學生
arr1[1]?=?student(70,?10,?"INC");?//卷10,標記70-
//第三學生
arr1[2]?=?student(85,?7,?"HYU");?//卷7,標記85-
//第四名學生
arr1[3]?=?student(83,?1,?"EFG");?//卷1,標記83-
//第五名學生
arr1[4]?=?student(81,?11,?"ABC");?//卷11,標記81-
//第二個列表
vector?arr2(5);
//第一名學生
arr2[0]?=?student(80,?5,?"XYZ");?//卷5,標記80-
//第二名學生
arr2[1]?=?student(70,?10,?"INC");?//卷10,標記70-
//第三學生
arr2[2]?=?student(85,?7,?"HYU");?//卷7,標記85-
//第四名學生
arr2[3]?=?student(83,?1,?"EFG");?//卷1,標記83-
//第五名學生
arr2[4]?=?student(81,?11,?"ABC");?//卷11,標記81-
//查找檢查兩個列表是否相等
//基于用戶定義的謂詞
if?(equal(arr1.begin(),?arr1.end(),?arr2.begin(),?pred))
cout?<
else
cout?<
//第三列表
vector?arr3(5);
//第一名學生
arr3[0]?=?student(89,?5,?"PVR");?//卷5,標記89-
//第二名學生
arr3[1]?=?student(70,?10,?"INC");?//卷10,標記70-
//第三學生
arr3[2]?=?student(85,?7,?"HYU");?//卷7,標記85-
//第四名學生
arr3[3]?=?student(83,?1,?"EFG");?//卷1,標記83-
//第五名學生
arr3[4]?=?student(81,?11,?"ABC");?//卷11,標記81-
//查找檢查兩個列表是否相等?based
//在用戶定義的謂詞上
if?(equal(arr1.begin(),?arr1.end(),?arr3.begin(),?pred))
cout?<
else
cout?<
return?0;
}
輸出:Both?lists?arr1,arr2?are?equal
Both?lists?arr1,arr3?are?not?equal
在這里,我們首先創(chuàng)建了兩個具有相同元素的列表。由于兩個列表的大小相等,因此我們發(fā)現(xiàn)等于返回true。對于第二種情況,我們更改了arr3中的元素以使其不相等,并且在輸出中反映出相同的內(nèi)容。在我們用戶定義的謂詞中,如果所有細節(jié)都匹配兩個學生,我們將返回true。
因此,在本文中,您看到了我們可以使用equal來檢查兩個范圍是否相等的效率。這種方法的應(yīng)用可以是檢查一個數(shù)組是否是另一個數(shù)組的子數(shù)組。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的C语言equal(),C ++中的std :: equal()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 数组指针,C语言数组名及指向数组
- 下一篇: c语言字符串替换有大小写,(C语言)字符