我正在嘗試將迭代器返回到過濾範圍中的最大元素。以下是我迄今爲止:C++:如何使用boost :: range找到max_element?
#include <boost/lambda/lambda.hpp>
#include <boost/range/adaptors.hpp>
#include <boost/range/algorithm.hpp>
#include <vector>
#include <iostream>
using namespace boost::adaptors;
using namespace boost::lambda;
using namespace std;
int main()
{
vector<double> x = {100, 150, 200, 110};
auto it = boost::max_element(x | indexed(0) | filtered(_1>100)); /* problem here */
cout << it.index() << endl;
return 0;
}
我預期的代碼中有最大元素的矢量x打印出來的指標(即2),但遺憾的是它不編譯(Linux的64位,GCC 4.7 .2),問題在上面指出的線上。我從編譯器中得到的第一個編譯錯誤如下:
/boost/tuple/detail/tuple_basic.hpp:396:36:錯誤:賦值只讀成員'boost :: tuples: :cons :: head'
任何想法我做錯了什麼?或者我還能如何實現我想要做的事情?提前致謝!
編輯:
更換有問題的行:
auto it = boost::max_element<boost::return_found>(x | sliced(1,4) | filtered(boost::function<bool(double)>(_1>100)));
似乎迭代器返回的最大元素。但是,有沒有辦法檢查迭代器是否在範圍內?比較它與boost :: end(x)給我一個錯誤。我唯一能想到的就是返回
auto another_range = boost::max_element<boost::return_found_end>(x | sliced(1,4) | filtered(boost::function<bool(double)>(_1>100)));
並檢查boost :: empty(another_range)。這是唯一的選擇嗎?謝謝。
小心使用'using'指令:'namespace std'和'namespace boost :: lambda'都有像'_1'這樣的佔位符。 – TemplateRex
@TemplateRex STL佔位符位於命名空間'std :: placeholders'中,因此在這種情況下不存在衝突。 –