0
을 사용하여 iterable
을 stdout
에서 ostream_iterator으로 직접 복사하려고합니다. remove_copy_if
은 return value
이 출력 범위의 끝까지 iterator
임을 보장합니다. 이 리턴 값은 출력 반복자의 시작과 리턴 반복자 사이의 거리를 알아 냄으로써 대상에 복사 된 요소의 수를 판별하는 데 유용합니다. 컨테이너를 사용할 때 이것은 의미가 있지만 같은 기능을 사용하여 대상에 복사되는 요소의 수를 결정하는 방법은 ostream_iterator
입니다.ostream_iterator를 사용하여 remove_copy_if를 사용할 때 복사 된 끝의 끝을 확인하십시오.
하면 내가
#include<vector>
#include<iterator>
#include<algorithm>
#include<functional>
#include<iostream>
#include <time.h>
using namespace std;
int main() {
int rawdata[] = {1,2,3,4,5,6,7,8,9,10,11};
vector<int> data(20);
vector<int>::iterator curr = remove_copy_if(rawdata,rawdata + sizeof(rawdata)/sizeof(rawdata[0]),data.begin(),bind2nd(greater<int>(),10));
wcout<<L"No of data copied = "<<curr - data.begin()<<endl;
for(int i=0;i<10;i++) {
int some_value = rand()%20 + 1;
ostream_iterator<int> curr = remove_copy_if(data.begin(),data.end(),ostream_iterator<int>(cout),bind2nd(less<int>(),some_value));
//if (curr - what???? > 0)
cout<<endl;
}
return 0;
}
나는 그렇게 생각하지 않습니다. 'ostream_iterator'는 OutputIterator 일뿐입니다. 단일 패스이기 때문에 거리에 대한 유용한 개념을 가지고 있지 않습니다. end iterator는 시작 반복자에서 얼마나 멀리 떨어져 있는지 기억하지 못합니다. 이 사이트에서는 출력용 BidirectionalIterator 또는 특히 RandomAccessIterator를 전달한 경우 반환 값이 유용 할 것이라고 말합니다. 'ostream_iterator'도 아니다. –
@SteveJessop : 동의합니다. 다른 가능한 방법이 있는지 확인하려고했습니다. 내가 생각할 수없는 것. – Abhijit
나는 명백한 (하지만 귀찮은) -'ostream_iterator'를 래핑하고 카운트를 유지하는 출력 반복자를 작성한다고 생각합니다. –