Spec-Zone.ru › Eigen3

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)
Inheritance graph
VectorBlock (VectorType &vector, Index start)
VectorBlock (VectorType &vector, Index start, Index size)

VectorBlock() [1/2]

template<typename VectorType , int Size>
Eigen::VectorBlock< VectorType, Size >::VectorBlock ( VectorType & vector,
Index start,
Index size
)
inline

Конструктор для выражений динамического размера

VectorBlock() [2/2]

template<typename VectorType , int Size>
Eigen::VectorBlock< VectorType, Size >::VectorBlock ( VectorType & vector,
Index start
)
inline

Конструктор для выражений фиксированного размера


Документация для этого класса была сгенерирована из следующего файла:
  • VectorBlock.h

© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1VectorBlock.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API