簡體   English   中英

將向量作為范圍傳遞給 std::sort - C++17

[英]Pass a vector as a range to std::sort - C++17

當我需要通過整個集合 go 時,我編寫此代碼是為了簡化std::for_each的使用:

namespace ranges {
    template<typename Range, typename Function>
    Function for_each(Range &range, Function f) {
        return std::for_each(std::begin(range), std::end(range), f);
    }
}

這樣我就可以像這樣使用它:

ranges::for_each(a, foo);

這對我有用,因為我還必須對整個 collections 進行排序,我認為使用std::sort實現相同的過程是個好主意,就像這樣:

namespace ranges {
    template<typename Range, typename Function>
    Function for_each(Range &range, Function f) {
        return std::for_each(std::begin(range), std::end(range), f);
    }

    template<typename Range, typename Function>
    Function sort(Range &range, Function f) {
        return std::sort(std::begin(range), std::end(range), f);
    }
}

當我將該代碼添加到我的命名空間時,編譯器會向我拋出以下錯誤消息:

錯誤:應忽略的無效值

有沒有辦法實現我想做的事情? 我正在使用 C++17 標准和g++.exe(Rev1,由 MSYS2 項目構建)11.2.0進行編譯。

您的for_each實現有效,因為您使用的std::for_each的定義定義如下:

namespace std {
    template <class Iterator, class Function>
    Function for_each(Iterator begin, Iterator end, Function f);
};

但是,調用的std::sort定義如下:

namespace std {
    template <class Iterator, class Function>
    void sort(Iterator first, Iterator last, Function comp);
};

在您的sort定義中,您不能返回對std::sort的調用結果,因為這兩個函數的返回類型是不同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM