Eigen::VectorBlock
template<typename VectorType, int Size>
class Eigen::VectorBlock< VectorType, Size >
Выражение подвектора фиксированной или динамической длины.
- Шаблочные параметры
-
VectorType тип объекта, из которого берется подвектор Size размер подвектора на этапе компиляции (необязательно)
Этот класс представляет выражение подвектора фиксированной или динамической длины. Он является типом возвращаемого значения DenseBase::segment(Index,Index) и DenseBase::segment<int>(Index), и чаще всего используется именно таким образом.
Однако, если вы хотите напрямую манипулировать выражениями подвектора, например, если хотите написать функцию, возвращающую такое выражение, вам нужно использовать этот класс.
Вот пример, иллюстрирующий динамический случай:
#include <Eigen/Core> #include <iostream> using namespace Eigen; using namespace std; template<typename Derived> Eigen::VectorBlock<Derived> segmentFromRange(MatrixBase<Derived>& v, int start, int end) { return Eigen::VectorBlock<Derived>(v.derived(), start, end-start); } template<typename Derived> const Eigen::VectorBlock<const Derived> segmentFromRange(const MatrixBase<Derived>& v, int start, int end) { return Eigen::VectorBlock<const Derived>(v.derived(), start, end-start); } int main(int, char**) { Matrix<int,1,6> v; v << 1,2,3,4,5,6; cout << segmentFromRange(2*v, 2, 4) << endl; // calls the const version segmentFromRange(v, 1, 3) *= 5; // calls the non-const version cout << "Now the vector v is:" << endl << v << endl; return 0; }
Результат:
6 8 Now the vector v is: 1 10 15 4 5 6
- Примечание
- Несмотря на то, что это выражение имеет динамический размер, в случае, если VectorType имеет фиксированный размер, это выражение наследует фиксированный максимальный размер, что означает, что его вычисление не приводит к динамическому выделению памяти.
Вот пример, иллюстрирующий случай фиксированного размера:
#include <Eigen/Core> #include <iostream> using namespace Eigen; using namespace std; template<typename Derived> Eigen::VectorBlock<Derived, 2> firstTwo(MatrixBase<Derived>& v) { return Eigen::VectorBlock<Derived, 2>(v.derived(), 0); } template<typename Derived> const Eigen::VectorBlock<const Derived, 2> firstTwo(const MatrixBase<Derived>& v) { return Eigen::VectorBlock<const Derived, 2>(v.derived(), 0); } int main(int, char**) { Matrix<int,1,6> v; v << 1,2,3,4,5,6; cout << firstTwo(4*v) << endl; // calls the const version firstTwo(v) *= 2; // calls the non-const version cout << "Now the vector v is:" << endl << v << endl; return 0; }
Результат:
4 8 Now the vector v is: 2 4 3 4 5 6
- См. также
- класс Block, DenseBase::segment(Index,Index,Index,Index), DenseBase::segment(Index,Index)
| VectorBlock (VectorType &vector, Index start) | |
| VectorBlock (VectorType &vector, Index start, Index size) | |
VectorBlock() [1/2]
| inline |
Конструктор для выражений динамического размера
VectorBlock() [2/2]
| inline |
Конструктор для выражений фиксированного размера
Документация для этого класса была сгенерирована из следующего файла:
© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1VectorBlock.html