[英]dynamically allocate memeory for Eigen Vector
我正在使用Eigen線性代數庫。 我努力嘗試在類的構造函數中分配特征向量,然后調用這些向量的元素。
例如,
#include <Eigen/Dense>
using Eigen::VectorXd;
#include <memory>
using std::unique_ptr;
class Cl
{
public:
unique_ptr<VectorXd> v;
Cl(const int n);
~Cl(void);
}
Cl::Cl(const int n)
{
auto v= unique_ptr<VectorXd>(new VectorXd(n));
}
Cl::~Cl(void)
{
v= nullptr;
}
main(void)
{
Cl cl(10);
/* call an element of v how? */
}
例如,使用“cl.v(2)”給我編譯器錯誤(我使用 clang++)
error: type 'unique_ptr<VectorXd>' (aka 'unique_ptr<Matrix<double, Dynamic, 1> >') does
not provide a call operator
使用“cl.(*v)(2)”時給了我
error: expected unqualified-id
cout << cl.(*v)(2) << endl;
我是 C++ 的新手,所以我可能在這里遺漏了一些非常基本的東西。
為什么要嘗試動態分配Eigen::VectorXd v;
本身? 除非您想將v
的生命周期延長到超過cl
的生命周期(在這種情況下您確實必須這樣做),否則我建議遵循以下簡單示例:
#include <Eigen/Dense>
using Eigen::VectorXd;
class Cl
{
public:
VectorXd v;
Cl(int n) : v(n) {}
~Cl() {}
}
int main()
{
Cl cl(10);
for (int i=0; i<10; ++i)
cl.v(i) = i;
}
我相信除了已經關於 std::vector 的答案之外,您還濫用了您的“unique_ptr”,如果您確實需要使用一個(參考 ggael 答案)。 請參閱以下有關使用 unique_ptr 的示例:
#include <iostream>
#include <memory>
#include <vector>
class Cl {
public:
std::unique_ptr<std::vector<int>> v;
Cl(const int size, int default_values);
~Cl(void);
int Size();
};
Cl::Cl(const int size, int default_values = 0) {
v.reset(new std::vector<int>(size, default_values));
}
Cl::~Cl(void) {
// do not require to reset/destroy an auto_ptr so this can be ommitted
}
int Cl::Size() {
return v->size();
}
int main(int argc, char* argv[]) {
Cl blob(10);
int size = blob.Size();
std::cout << size << std::endl;
}
在您提供的代碼中,您在構造函數中聲明了一個新的 auto,而不是使用您在 Public 類定義中定義的變量。 我已經包含了一個 'Size' 方法,所以你可以看到范圍超出了構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.