vector<uint8_t> increments;
…
vector<uint32_t> increasing(increments.size());
partial_sum(increments.begin(), increments.end(), increasing.begin());
, 그래서이 (GCC 4.2)를 수행합니다
partial_sum(increments.begin(), increments.end(), increasing.begin(),
plus<uint32_t>());
plus<uint32_t>
피연산자를 홍보하고 오버플로를 방지해야합니까?
편집 : 저는 너무 중독되었습니다. 짧은 휴식 후에, 나는 다시 앉아서 구현을 점검했다. ...
/* input_iterator::value_type */ __value = __binary_op(__value, *__first);
*++__result = __value;
내가 그 준수 생각하지 않는다, 그래서 최신 버전을 확인하고 어쩌면 버그를 제출할 수 있습니다 여기에 우리가 간다 : 이것이 수행 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42943
나는 당신이 옳다고 생각한다. 문제는 '더하기'가 매개 변수를 변환하는지 여부이다. 물론 문제는 26.4.3/1에서 두 번째 출력에 할당 된 값이' 하지만 InputInterator :: value_type (binary_op (* first, * (first + 1)))이 아닌 binary_op (* first, * (first + 1) 그것은 그것을 사용하고있을 수 있지만, 함수는 result_type을 가지고 있지 않으며, 확실히 partial_sum에 함수 포인터를 전달할 수 있습니까? 아마도 나에게 너무 늦었을 것입니다 ... –
아, 함수 포인터. §25/8 (sorta)을 제외하고는 연산 객체에 대한 특정 요구 사항을 찾을 수 없으며 두 개의 인수로 호출 할 수 있습니다. 템플릿은 함수에서 반환 유형을 추출 할 수 있지만 변경 사항이 더 큰 영향을줍니다. – Potatoswatter
BinaryFunction에서 유형을 추론하는 대신 InputIterator 유형 대신 OutputIterator의 value_type을 사용하지 않는 이유는 무엇입니까? – visitor