C++,Java,Rubyのイテレータ
これまで毛嫌いしていたC++なのだが、仕事でやむなくvectorをiteraterで操作してみたら、それはそれで結構面白いと思ったので、Javaでも書いてみた。サンプルは vector(ArrayList) に 0〜9の値を突っ込んだあと、イテレータで回って5未満のものを削除し、結果を標準出力に表示するもの。
IteratorTest.cpp:
#include <vector> #include <iostream> using namespace std; int main ( int argc, char **argv ) { vector<int> v; for (int i=0; i<10; i++) { v.push_back(i); } vector<int>::iterator p = v.begin(); while (p != v.end()) { if (*p < 5) { v.erase(p); } else { p++; } } for (int i=0; i<v.size(); i++) { cout << v[i] << endl; } exit (0); }
IteratorTest.java
import java.util.*; class IteratorTest { public static void main (String args[]) { ArrayList l = new ArrayList(); for (int i=0; i<10; i++) { l.add(new Integer(i)); } Iterator i = l.iterator(); while(i.hasNext()){ Integer num = (Integer)i.next(); if(num.intValue() < 5) { i.remove(); } } i = l.iterator(); while(i.hasNext()){ System.out.println (i.next()); } } }
IteratorTest.rb
#!/bin/env ruby a = [] for i in 0..10 a << i end a.delete_if do |i| true if i < 5 end a.each do |i| print i, "\n" end