c++11っぽくstd::vectorでindexをfindしたい

こんにちは。ヤマヤタケシです。
やっぱりC++だね!
c++11っぽくstd::vectorでindexをfindしたい!
ルー大柴か!

さて、配列の中の要素を探すという、基本的なことだからこそ、STLっぽくやりたい!

今回、欲しいのは配列の番号であり、値じゃない。
しかし、std::findで探せるのはiteratorだから、しょうがなくこう書きました。

int findIndex( int value )
{
    size_t len = m_array.size();
    for( size_t n = 0 ; n < len ; ++n ){
        if( m_array[ n ] == value ){
            return n;
        }
    }
    return -1;
}

これはもはやC言語と同じだ!
C++っぽくないぜよ?

改めて検索すると、さすが世界のStackoverflowですね。
良い答えがありました。これはSTLっぽい!
Stackoverflowから引用です。

std::vector::iterator iter = std::find(vec.begin(), vec.end(), value);
size_t index = std::distance(vec.begin(), iter);
if(index == vec.size())
    {
        //invalid
    }

引用ここまで。
std:distance。そんなものがあるんですね。素晴らしい!

ふふ、覚えたてのautoを使って、c++11っぽくこうしよう。

int findIndex( int value )
{
    auto iter = std::find( m_array.begin(), m_array.end(), value);
    size_t index = std::distance( m_array.begin(), iter );
    if(index == vec.size())
        {
            return -1;
        }
    return index;
}

これで俺もC++11の人の仲間入りだ!

そんじゃまた。

軽い気持ちで有名になりたいのでクリックをお願いします!