2016年5月30日月曜日

std vector の For loop 中での削除

VectorのEraseを使い、条件に合ったものを削除するプログラムを書いたのですが、途中でハマってしまった。考えてみると馬鹿なのだが、ちょっとしたことなので記録。

サンプルのコードは以下
for ( ; it != data.end(); ) {
  if (condition) {
    it = data.erase(it);
  } else {
    ++it;
  }
}

馬鹿のことは、data.eraseの前の "it ="を忘れてエラーを出しまくってしまった。









2016年5月16日月曜日

cv::Rect を vector に保存すると遅かったので 構造体で高速化

原因はわかりませんが、
std::vector(cv::Rect) Rects;
で作った値に、push_backで追加するとすさまじく遅い。毎ループ3 つ追加するだけなのに、
100ms
なんじゃこれ?

検証する時間がもったいないので、取りあえず改造して高速化する。
欲しいのは、
x
y
height
width
だけなので、その分だけの構造体を作って、
typedef struct{
int x, y, width, height;
}Region;

std::vector<Region> Regions;

って感じに変える。
こうすると、1ms以下。

クラスの追加でいろいろと変な処理が入っていると思います。おそらくRectのクラスの中を見るとわかるんでしょうが、時間がもったいないのでしない。

取りあえず、高速化できたからよしとしよう。