我是 C 的初學者。我正在學習 STL,尤其是向量和迭代器的使用。我試圖使用 (find_if) 函式在螢屏上顯示偶數。我知道我必須將布林值回傳到函式中的第三個欄位(find_if) ..但是它給了我向量中的所有元素!.但是,當我使用函式(GreaterThanThree)時,代碼輸出正確的值沒有任何問題。這是我的代碼:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool EvenNumber(int i)
{
return i%2==0
}
/*bool GreaterThanThree(int s)
{
return s>3;
}
*/
int main()
{
vector <int> v={2,1,4,5,0,3,6,7,8,10,9};
sort(v.begin(),v.end());
auto it= find_if(v.begin(),v.end(),EvenNumber);
for(;it!=v.end();it )
{
cout<<*it<<" ";
}
return 0;
}
uj5u.com熱心網友回復:
您可以使用std::find_if
,但每次呼叫只能找到一個元素(最多)。這意味著你需要一個回圈。第一次,您從v.begin()
. 這將回傳第一個偶數元素的迭代器。要找到第二個偶數元素,您必須在第一個找到的元素之后而不是在 ( )處開始第二次find_if
搜索。v.begin()
1
您應該在std::find_if
回傳時立即停止v.end()
,甚至可能在第一次呼叫時停止(如果所有元素都是奇數)。IEfor(auto it = std::find_if(v.begin(), v.end(), EvenNumber); it != v.end(); it = std::find_if(it 1, v.end(); EvenNumer))
uj5u.com熱心網友回復:
我試圖使用 (
find_if
) 函式在螢屏上顯示偶數[...]
這 std::find_if
是一個錯誤的工具;std::find_if
事實上,如果您打算列印所有偶數元素,則不需要。
你需要一個for
-loop。
for (auto ele: v)
if(EvenNumber(ele))
std::cout << ele << " ";
話雖如此,如果您只想列印s向量中的第一個偶數int
,您應該只使用一個if
陳述句:
auto it = std::find_if(v.begin(), v.end(), EvenNumber);
if (it != v.end())
std::cout << *it << " ";
此操作不需要std::sort
,除非您需要在向量中找到最小的偶數。
[...] 但它給了我向量中的所有元素...
這是因為,您已經從指向已排序向量中第一個(最小)偶數位的迭代器進行迭代。由于0
是排序向量中的最小元素和第一個元素,因此您將在迭代時看到所有元素的后綴。
另請注意以下幾點:
閱讀為什么“使用命名空間標準;” 被認為是不好的做法?
您可以使用基于范圍的 for 回圈,它可以方便地迭代元素(因為c 11)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/496790.html
下一篇:是否可以將功能標記為不被優化?