當我讀C++引物,有一個定義的術語,其是謂詞。
的定義是這樣的:一個返回類型,可轉換爲bool
功能。通常由泛型算法用於測試元素。圖書館使用的謂詞是一元的(取一個參數)或二元的(取兩個)。
任何返回可以轉換爲bool的類型都可以作爲謂詞!對?或者還有其他一些限制條件。
謝謝!
當我讀C++引物,有一個定義的術語,其是謂詞。
的定義是這樣的:一個返回類型,可轉換爲bool
功能。通常由泛型算法用於測試元素。圖書館使用的謂詞是一元的(取一個參數)或二元的(取兩個)。
任何返回可以轉換爲bool的類型都可以作爲謂詞!對?或者還有其他一些限制條件。
謝謝!
在C++(我知道無論如何)的上下文中沒有對謂詞的正式定義,但它通常意味着可以在真/假上下文中使用的函數。
下面是從cppreference一個可能實現的count_if,說明它在談論:
template<class InputIt, class UnaryPredicate>
typename iterator_traits<InputIt>::difference_type
count_if(InputIt first, InputIt last, UnaryPredicate p)
{
typename iterator_traits<InputIt>::difference_type ret = 0;
for (; first != last; ++first) {
if (p(*first)) {
ret++;
}
}
return ret;
}
p
必須返回的東西,可以在if
語句的內部使用是它基本上可以歸結爲。
例如:
class T {};
T f(int x)
{
return T();
}
這不是count_if有效的斷言,因爲T不是隱式轉換爲一個布爾值。
換句話說:
if (f(4)) { }
是不可編譯的代碼。
但是,如果T可以被隱式轉換爲布爾值,那麼f
將是一個可接受的謂詞(雖然很奇怪)。
這很有用。非常感謝。 –
想象一下,你正在刪除字符串中的所有元音。通常情況下,你會做類似的操作(忽略簡單的'erase'調用)'std :: remove_if(std :: begin(str),std :: end(str),isVowel);'。在這種情況下,'isVowel'是謂詞,它需要一個字符,如果是元音則返回true。你可以將這個概念應用於這種性質的任何事物。 – chris
形式上在C++中,沒有定義什麼是謂詞,它來自邏輯,用於命名來自許多C++標準庫函數的參數。就像在'InputIterator find_if(InputIterator first,InputIterator last,Predicate pred)'。順便說一句,**函數**也可以作爲與這些函數一起使用的謂詞。 –
@jogojapan是的。但它已經關閉了。我想獲得更多關於它的信息。謝謝! –