こんにちは。ヤマヤタケシです。
やっぱり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の人の仲間入りだ!
そんじゃまた。