STL.NET - vector

http://www.microsoft.com/japan/msdn/vs05/visualc/stl-netprimer.aspを読みながらSTL.NETでも弄ってみようかと思ってましたが、なんか上手く行かないです。cli/vectorがcliext/vectorになっているとかはいいのですが、

sort( &arr[0], &arr[ arr->Length ] );

とかするとエラーの嵐が出たりとか。ちょっとクセがあるのか実装が不完全なのかよく分からないです。(^^;
取りあえず、試行錯誤の跡。

#include "stdafx.h"
#include <cliext/string>
#include <cliext/vector>
#include <cliext/algorithm>
#include <cliext/functional>

using namespace System;
// STL.NETの名前空間
using namespace cliext;

void test_vector_int()
{
    vector<int> vi;
    vi.push_back(1);
    vi.push_back(2);
    vi.push_back(3);

    reverse(vi.begin(), vi.end());
    vector<int>::iterator it = vi.begin();
    while (it != vi.end()) {
        Console::WriteLine(*it++);
    }
    sort(vi.begin(), vi.end());
    for each (int n in vi)
        Console::WriteLine(n);
}

void test_vector_string()
{
    vector<string^> v;
    // v.push_back("ABC")させて欲しい・・・
    v.push_back(gcnew string("ABC"));
    v.push_back(gcnew string("DEF"));
    v.push_back(gcnew string("GHI"));

    reverse(v.begin(), v.end());
    vector<string^>::iterator it = v.begin();
    while (it != v.end()) {
        // string -> Stringでメンバ変数直接使うのは嫌だなぁ
        Console::WriteLine*1;
    for each (string^ s in v)
        Console::WriteLine(s->_Mycont);
}

bool compare_less(String^ lhs, String^ rhs)
{
    return lhs < rhs;
}

void test_vector_String()
{
    vector<String^> v;
    v.push_back(gcnew String("ABC"));
    v.push_back(gcnew String("DEF"));
    v.push_back(gcnew String("GHI"));

    reverse(v.begin(), v.end());
    vector<String^>::iterator it = v.begin();
    while (it != v.end()) {
        Console::WriteLine*2;
    sort(v.begin(), v.end(), compare_less);

    for each (String^ s in v)
        Console::WriteLine(s);
}

int main(array<System::String ^> ^args)
{
    test_vector_int();
    test_vector_string();
    test_vector_String();
    return 0;
}

*1:*it++)->_Mycont); } sort(v.begin(), v.end(

*2:*it++) ); } // error C2865:'<':ハンドル型の比較が正しくありません // lhs < rhsで比較出来ているのに、なんでエラーになるのかしら・・・ // sort(v.begin(), v.end(