find() algorithm一次只能找一個條件,若要同時找多個條件,需使用find_first_of()。
find_first_of()允許我們將要找的條件先放到另外一個container中,然後一起搜尋,結果傳回第一個找到的iterator。
此範例中我們想找出第一個出現的母音,因為母音有aeiou,若用find(),就得搜尋5次,若用find_first_of(),只需一行就可找出第一個母音。
1
/*
2
(C) OOMusou 2006 http://oomusou.cnblogs.com
3![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
Filename : GenericAlgo_find_first_of.cpp
5
Compiler : Visual C++ 8.0 / ISO C++
6
Description : Demo how to use find_first_of() algorithm
7
Release : 12/14/2006 1.0
8
*/
9
#include <iostream>
10
#include <algorithm>
11
#include <string>
12![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
using namespace std;
14
int main() {
15
string s = "To be or not to be is a question";
16
string vowel = "aeiou";
17![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
// first vowel in s
19
cout << "First vowel in s " << endl;
20
{
21
string::iterator c = find_first_of(s.begin(), s.end(), vowel.begin(), vowel.end());
22
if (c != s.end()) cout << *c << endl;
23
}
24![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
cout << endl;
26![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
// All vowel in s using while(), more readable
28
cout << "All vowel in s using while()" << endl;
29
string::iterator s_begin = s.begin();
30
while(s_begin != s.end()) {
31
string::iterator c = find_first_of(s_begin, s.end(), vowel.begin(), vowel.end());
32
if (c != s.end()) {
33
cout << *c++ << " ";
34
s_begin = c;
35
}
36
else {
37
break;
38
}
39
}
40![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
cout << endl << endl;
42![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
// all vowel in s usng for, more compact
44
cout << "All vowel in s using for()" << endl;
45
for(string::iterator s_begin = s.begin(),c; s_begin != s.end(); s_begin = c) {
46
c = find_first_of(s_begin, s.end(), vowel.begin(), vowel.end());
47
if (c != s.end()) cout << *c++ << " "; else break;
48
}
49![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
cout << endl << endl;
51![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
return 0;
53
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
執行結果
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
21,22行為find_first_of的標準用法,有兩個input range。
我們似乎無法滿足若只能找到一個母音的結果,若我們想找到所有的母音呢?若找到第一個母音後,則繼續從找到的位置的下一個繼續找,依直到找不到為止,29行到39行使用while(),這種寫法可讀性較佳,也顯示了while()仍有其價值,44行到48行使用for(),程式較精簡,不過可讀性較差,需要一點程度。