[英]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.