STL/CLRの<iterator>には
back_insert_iterator / front_insert_iterator / insert_iterator が定義されてねぇのす。
お試しにこしらえてみた。
template<typename Container>
ref class back_insert_iterator {
public:
typedef cliext::output_iterator_tag iterator_category;
typedef typename Container::value_type value_type;
back_insert_iterator(Container^ c) : container(c) {}
back_insert_iterator% operator=(value_type% val)
{ container->push_back(val); return *this; }
static back_insert_iterator% operator*(back_insert_iterator% i)
{ return i; }
back_insert_iterator% operator++()
{ return *this; }
back_insert_iterator% operator++(int)
{ return *this; }
protected:
Container^ container;
};
template<typename Container> inline
back_insert_iterator<Container>^ back_inserter(Container^ c) {
return gcnew back_insert_iterator<Container>(c);
}
int main() {
cliext::vector<String^> v0;
v0.push_back(L"相川");
v0.push_back(L"井上");
v0.push_back(L"上村");
v0.push_back(L"えぴ");
v0.push_back(L"小田");
cliext::vector<String^> v1;
cliext::remove_copy(v0.begin(), v0.end(),
back_inserter(%v1), gcnew String(L"えぴ"));
for each ( String^ item in v1) {
Console::WriteLine(item);
}
}
... こんなんでいいのかなー。
どデカい穴空いてる気がしてなんね。