range_adapter : STL/CLRイテレータの組をICollection/IEnumerable化する。
STL/CLRコンテナはICollection/IEnumerableなのでコンテナまるごと for each できる。
コンテナまるごとではなく、コンテナ内の要素範囲を示すイテレータの組[first,last)
があるとき、range_adapterでIEnumerable化することで for each できる。
#include <cliext/algorithm>
#include <cliext/adapter>
#include <cliext/vector>
using namespace System;
using namespace System::Collections::Generic;
using namespace cliext;
int main() {
vector<String^> v(gcnew array<String^> { L"one", L"two", L"three", L"four" });
vector<String^>::iterator start = v.begin(); ++start; // アタマの次
vector<String^>::iterator goal = v.end(); --goal; // ケツの前
// rangeを作って for each
range_adapter<vector<String^>::iterator> range(start, goal);
for each ( String^ item in range ) {
Console::WriteLine(item);
}
return 0;
}
※ ヘルパ関数 make_collection を使うとちょびっと簡単↓
for each ( String^ item in make_collection(start,goal) ) {
Console::WriteLine(item);
}