std::vectorとEigen::MatrixXdを用いた行列計算プログラムでのエラー
std::vectorにEigen::MatrixXdを追加していき, あとからvector内の行列を計算させるプログラムを作りたいのですが,
どうしてもうまくいきません...  
下のプログラムを実行するとこのようなエラーがでます.

```

    affine.cpp: In function ‘int main(int, const char**)’:
    affine.cpp:15:12: error: ‘itr’ does not name a type
       for(auto itr = model.begin(); itr != model.end(); ++itr) {
                ^
    affine.cpp:15:33: error: expected ‘;’ before ‘itr’
       for(auto itr = model.begin(); itr != model.end(); ++itr) {
                                     ^
    affine.cpp:15:33: error: ‘itr’ was not declared in this scope
    
```

ソースコードはここからです.

```

    #include <iostream>
    #include <vector>
    #include "Eigen/Core"
    
    int main(int argc, char const* argv[])
    {
      std::vector<Eigen::MatrixXd> model;
    
      model.push_back(Eigen::MatrixXd(3, 6));
      model.push_back(Eigen::MatrixXd(6, 5));
    
      Eigen::MatrixXd a(1, 3);
      std::cout << a << std::endl;
    
      for(auto itr = model.begin(); itr != model.end(); ++itr) {
        a *= (*itr);
      }
    
      return 0;
    }
    
```

エラーの解決方法に加えてvectorにMatrixXdをpush_backしても後々大丈夫なのかということも教えていただけるとありがたいです.  
どなたか分かるかたご教示ください.
コンパイラにはg++を使っているようですが、`auto`はC++11から導入されたので、コンパイルオプションに`-std=c++11`が必要です。これがないと、そのようなエラーが出ます。

* * *

> vectorにMatrixXdをpush_backしても後々大丈夫なのか

というのが、動作するのか、という意味なら大丈夫だと思います。vectorはサイズが大きくなる時に、中身のコピーかムーブが起こるので、パフォーマンスが気になりますが、ざっとヘッダーファイルを見たところ、ムーブコンストラクタなどもサポートしているようなので、神経質になる必要はないのかもしれません。

* * *

ちなみに、インスタンスを作って直ぐに `push_back` するのなら、`emplace_back` を使うといいです。

```

      model.push_back(Eigen::MatrixXd(3, 6));
      model.push_back(Eigen::MatrixXd(6, 5));
    
```

の代わりに

```

      model.emplace_back(3, 6);
      model.emplace_back(6, 5);
    
```

とします。見た目もすっきりしますし、パフォーマンスの改善も見込めます。