0
我試圖使用remove_copy_if將iterable
直接複製到stdout
到ostream_iterator。 remove_copy_if
保證return value
到iterator
到輸出範圍的末尾。通過找出輸出迭代器的開始與返回迭代器之間的距離,此返回值有助於確定複製到目標的元素的數量。這在使用容器時很有意義,但如何使用相同的功能來確定複製到目標的元素的數目(如果其爲ostream_iterator
)。確定在使用remove_copy_if和ostream_iterator時複製範圍的結束
下面的例子應該能理解了什麼,我可能要達到
#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,它沒有這樣一個有用的距離概念,因爲它是單遍的。結束迭代器當然不記得它離開始迭代器有多遠。該網站表示,如果您爲輸出傳遞BidirectionalIterator,或者特別是RandomAccessIterator,返回值將非常有用。 'ostream_iterator'既不是。 –
@SteveJessop:我同意。我試圖看看是否有其他可行的方法來做到這一點。一些我想不到的東西。 – Abhijit
我認爲只是顯而易見的(但令人厭煩) - 編寫自己的輸出迭代器,它包裝'ostream_iterator'並保持計數。 –