2016-12-01 43 views
2

我們可以使用函數的std :: min_element從算法庫的範圍內獲得的最小元素的所有元素。如何找到它們的範圍內,最小而不做幾個傳球(C++)

#include <algorithm> 
#include <vector> 
std::vector<int> v{3, 1, 4, 1, 5, 9}; 
std::vector<int>::iterator it = std::min_element(std::begin(v), std::end(v)); 

迭代器'it'指向vector中的第2個元素。

是否有可能讓所有的微量元素(這裏V [1]和v [3]),而在容器上進行迭代幾次?

感謝

回答

-3

的的std::min_element複雜linear這意味着它不會通過多次迭代。

+1

你不明白的問題。 – Eugene

2

當然是可以的,但不能用std::min_element

是這樣的:

template<typename ITER> 
std::vector<ITER> find_all_min(ITER begin, ITER end){ 
    auto min = *begin; 
    std::vector<ITER> ret{ begin }; 
    for (++begin; begin != end; ++begin) { 
     if (*begin < min) { 
      min = *begin; 
      ret.clear(); 
      ret.push_back(begin); 
     } else if (*begin == min) { 
      ret.push_back(begin); 
     } 
    } 
    return ret; 
} 

我的例子假設,即begin < end

我們只是遍歷容器,找到最小的元素,記住它的迭代器,並投入迭代器向量。

+0

好的謝謝。但是沒有辦法利用算法可用?他們已經提供的設計來定義自己的比較(我知道我能適應你寫的東西,我在尋找最「自然」的方式) – stackoverflower

+0

@stackoverflower你能確定最小元素,像你一樣,然後再重複矢量,使用find_if。但是,這是2次迭代,而我的解決方案是一個,如你所請求的。 – Starl1ght

相關問題