2016-02-15 31 views

回答

3

不能使用std::find。假設0&&1&&D,就是要三個值的列表,你想找到任何這些值的向量元素,你可以使用:

  • std::find_if與謂詞(拉姆達可能是最簡單的例如[](const T& x) { return x == 0 || x == 1 || x == d; },其中T是您vector持有任何類型),或

  • std::find_first_of(鏈接的頁面有一個很好的例子)。

+0

不完全是,但接近。我試圖做的是找到我的向量是否包含所有那些元素,即vector [0] == 1,vector [1] == 0,vector [2] = = D'。不一定要在這些確切的位置,但假設一個大小爲i的向量。同樣,他們不必相鄰。 – Noobgineer

+0

那你還不如把1,0,d值到第二載體,並且有超過它在每個反過來這些值的第一向量調用'find'一個'for'循環。如果第二個向量比第一個向量小得多,那麼它可能不太適合緩存,但是我沒有理由認爲在程序的性能關鍵部分有足夠的數據來實現這個實際問題。如果你決心要避免這種情況,你可以使用'find_first_of',每找到一個匹配的時間從集合你正在尋找的值刪除匹配的元素,直到它是空的(成功)或者你打'end'。 –

1

C++ Reference指出它很清楚:

一個迭代中的範圍內,其比較等於val第一元件 如果沒有元素匹配,則。函數返回last。「

所以你不能只用一個函數調用做到這一點。

+0

這可能是一個單獨的問題,但是如果某些元素存在,是否有一種方法可以用於在向量中搜索?或者我必須遞歸地做呢? – Noobgineer

+0

可能要檢查_Tony D_的回答爲:) – Nacho

0

std::for_each可能適合你。

std::for_each(vector.begin(), 
       vector.end(), 
       [](auto item) -> void {if (item == <xxx>) { /* Use the item */ }); 

您在留言中提到:

這可能是一個單獨的問題,但我可以使用,如果某些元素存在於載體進行搜索的方法?

std::any_of是該功能。

bool found = std::any_of(vector.begin(), 
         vector.begin(), 
         [](auto item) -> bool { return item == <xxx>; }); 
+0

你能解釋第三個參數嗎? '[](auto item) - > bool {return item == l})''做了什麼? – Noobgineer

+0

這是一個lambda函數。有關更多詳細信息,請參見http://en.cppreference.com/w/cpp/language/lambda。 –