在"Accelerated C++:Example Programming by Example"中,第6.1.3章是find()来自"algorithm"库的示例:
我们想检查a char是否在字符串中:
bool find_char(char c){
string str = "asdf";
return find(str.begin(), str.end(), c) != str.end();
}
Run Code Online (Sandbox Code Playgroud)
然后,有一个解释find():
它与find_if类似,不同之处在于它不是调用谓词,而是查找作为第三个参数给出的特定值.与find_if一样,如果存在我们想要的值,则该函数返回一个迭代器,表示给定序列中第一次出现的值.如果找不到该值,则find返回其第二个参数.
这让我想知道为什么我们不使用更短更清洁的版本:
bool find_char(char c){
string str = "asdf";
return find(str.begin(), false, c); //does not compile, see Top Answer
}
Run Code Online (Sandbox Code Playgroud)
这被认为是不好的风格?这段代码有问题吗?
问题是第二个参数不仅是在大海捞针中找不到针时返回的值,第二个参数也是干草堆本身末端的(指针或迭代器).你false作为第二个参数的例子std::find将不会编译,因为false它不是任何迭代器,并且当然不具有可比性或兼容性std::string::begin(),更不用说形成范围的结束.