2017-10-15 74 views
1

在C++中,是否可以傳入只迭代滿足某些條件的元素的迭代器?儘管編寫自己的迭代器類肯定是可行的,但我想知道存在一個標準庫解決方案。例如,std::discrete_distribution的構造函數接受兩個迭代器(begin和end)的輸入。現在,我需要做到以下幾點:傳遞迭代器只迭代滿足特定條件的元素

std::vector<int> x = {1, 2, 3, 4, 5}; 
std::vector<int> y; 
std::copy_if(x.begin(), x.end(), std::back_inserter(y), my_condition); 
std::discrete_distribution dd(y.begin(), y.end()); 

但是這將需要複製的y的elemnts兩次。我寧願像以下:

std::vector<int> x = {1, 2, 3, 4, 5}; 
std::discrete_distribution dd(std::condition_iter(x.begin(), my_condition), x.end()); 
+0

你可以從'std :: vector :: iterator'派生自己的迭代器類,並覆蓋'operator ++'來使用你的條件。看看這裏:https://stackoverflow.com/questions/25772860/c-iterator-over-certain-elements-in-vector – nitronoid

回答