Map類用於經過C++中普通的連續指針或者數組 (raw C/C++ arrays)來構造Eigen裏的Matrix類,這就比如Eigen裏的Matrix類的數據和raw C++array 共享了一片地址,也就是引用。
1. 好比有個API只接受普通的C++數組,但又要對普通數組進行線性代數操做,那麼用它構造爲Map類,直接操做Map就等於操做了原始普通數組,省時省力。
2. 再好比有個龐大的Matrix類,在一個大循環中要不斷讀取Matrix中的一段連續數據,若是你每次都用block operation 去引用數據,太累(雖然block operation 也是引用類型)。因而就事先將這些數據構形成若干Map,那麼之後循環中就直接操做Map就好了。
實際上Map類並無本身申請一片空內存,只是一個引用,因此須要構造時初始化,或者使用Map的指針。
引伸一下,Eigen裏 ref 類也是引用類型,Armadillo 裏 subview 都是引用類型,
Eigen開發人說的
The use 'sub' as a Matrix or Map. Actually Map, Ref, and Block inherit from the same base class. You can also use Block.
因此說了這麼多,就一句話 Map 就是個引用。
2. 再好比有個龐大的Matrix類,在一個大循環中要不斷讀取Matrix中的一段連續數據,若是你每次都用block operation 去引用數據,太累(雖然block operation 也是引用類型)。因而就事先將這些數據構形成若干Map,那麼之後循環中就直接操做Map就好了。
實際上Map類並無本身申請一片空內存,只是一個引用,因此須要構造時初始化,或者使用Map的指針。
引伸一下,Eigen裏 ref 類也是引用類型,Armadillo 裏 subview 都是引用類型,
Eigen開發人說的
The use 'sub' as a Matrix or Map. Actually Map, Ref, and Block inherit from the same base class. You can also use Block.
因此說了這麼多,就一句話 Map 就是個引用。
例如:
Eigen::Map<const Quaterniond> quaterd(parameters[0]);
Eigen::Map<const Eigen::Vector3d> trans(parameters[0] + 4);EIGEN3 在/usr/local/include/eigen3中與/usr/include/eigen3中的能夠互換