STLアルゴリズム

STLのコンテナ系はもともと使用していたけど、今回、とあることで初めて(?)アルゴリズム系も触ってみた。

アルゴリズムという何となく数学的な響きを理由に意味もなく敬遠してたけど、その便利さに感動した。

 

とりあえず一例

std::vector型のdataから0以外の値を削除する。

当たり前にこうやってたのが、

std::vector<int>::iterator it = data.begin();
while (it != data.end()) {
  if (*it == 0) {
    ++it;
  } else {
    it = data.erase(it);
  }
}

これですんじゃうんですね。

data.erase(std::remove_if(data.begin(), data.end(), std::bind2nd(std::not_equal_to<int>(), 0)), data.end());

 

うーん、なんか気持ちいい。