取消引用对 std::vector<std::vector<double> >不起作用

Dereferencing not working for std::vector<std::vector<double> >

本文关键字:gt lt vector std 不起作用 引用 取消 double      更新时间:2023-10-16
struct myS {
   std::vector<std::vector<double> > *A;
}

我想使用索引访问 A 的元素。我试过这个(以及其他版本(,但它不起作用。

struct myS test;   
std::vector<double> B = *(test.A)[0];

重新定位括号:

std::vector<double> B = (*test.A)[0];

这将编译:

struct myS{
   std::vector<std::vector<double> > *A;
};
myS instanceOfMyS;
std::vector<double> B = (*instanceOfMyS.A)[0];

注意

  • struct myS只是声明了一种myS.若要声明该类型的实例,需要添加instanceOfMyS后记。
  • 您还省略了B声明中的<double>

但是,上面的代码将复制*instanceOfMyS.A中的第一个元素。因此,您可能需要一个参考。

std::vector<double>& B = (*instanceOfMyS.A)[0];

最后,您在struct中使用指针看起来有点狡猾(使用指针,除非显式分配内存,否则您不会分配内存来支持指向 A 的矢量,从而导致访问冲突(。您可能需要以下内容

struct myS{
   std::vector<std::vector<double> > A;
};
myS instanceOfMyS;
std::vector<double>& B = instanceOfMyS.A[0];

这将起作用:

myS myObj;
// Add some stuff in your vector(s) ...
...
// Access your vector
std::vector<double> B = (*myObj.A)[0]; // Don't forget here that it will copy the elements of the vector

或者,如果您想将项目访问到第二个向量中:

double B = (*myS.A)[0][0];

另一个问题:在这种情况下,为什么要在结构中使用向量?在我自己看来,你的结构中不应该有这个指针。它应该是一个值,如:

struct myS{
   std::vector<std::vector<double> > A;
}

编辑:解决了取消引用指针的小错误

你应该

(myS->A)[i]来访问第 i 个外部向量: 将你的行重写为

std::vector B = (myS->A)[0] ;

但请注意,这将采用向量的值副本。

顺便说一下,您需要执行(myS->A)[i][j]才能访问第 i 个外部向量中的第 j 个元素,

但是为什么要首先使用指针呢?