필자는 필터링 된 범위에서 가장 큰 요소로 반복자를 반환하려고합니다. 나는 가장 큰 요소가 벡터 X의 인덱스를 인쇄하는 코드를 예상 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;
}
(예 2),하지만 불행히도 그것은 컴파일되지 않습니다 (리눅스 64 비트, GCC 4.7 : 여기에 지금까지 무엇을 가지고 .2) 문제는 위에 표시된 줄에 있습니다. 컴파일러에서 얻은 첫 번째 컴파일 오류는 다음과 같습니다.
/boost/tuple/detail/tuple_basic.hpp:396:36 : 오류 : 읽기 전용 멤버 'boost :: tuples : : 단점 : 머리 '
내가 뭘 잘못하고 있는거야? 아니면 내가 뭘 하려는지 어떻게 성취 할 수 있니? 미리 감사드립니다!
편집 :
에 문제가있는 라인을 변경 :
auto it = boost::max_element<boost::return_found>(x | sliced(1,4) | filtered(boost::function<bool(double)>(_1>100)));
은 큰 요소로 반복자를 반환하는 것 같다. 그러나 iterator가 범위 내에 있는지 확인하는 방법이 있습니까? boost :: end (x)와 비교하면 오류가 발생합니다. 내가 생각할 수있는 유일한 방법은
auto another_range = boost::max_element<boost::return_found_end>(x | sliced(1,4) | filtered(boost::function<bool(double)>(_1>100)));
을 반환하고 부스트 :: 빈 (another_range) 여부를 확인하는 것입니다. 이것이 유일한 옵션입니까? 감사.
'using' 지시어에주의하십시오.'namespace std'와'namespace boost :: lambda'는'_1'과 같은 자리 표시자가 있습니다. – TemplateRex
@TemplateRex STL 자리 표시자는 네임 스페이스 'std :: placeholders'에 있으므로이 경우에는 충돌이 없습니다. –