繁体   English   中英

取消引用不适用于std :: vector <std::vector<double> &gt;

[英]Dereferencing not working for std::vector<std::vector<double> >

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个元素,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM