簡體   English   中英

為特征向量動態分配內存

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM