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

我想使用索引访问 A 的元素。我试过这个(以及其他版本),但没有奏效。

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

4 回答 4

3

重新定位括号:

std::vector<double> B = (*test.A)[0];
于 2013-07-04T08:58:17.197 回答
2

这编译:

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

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

笔记

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

但是,上面的代码将复制*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];
于 2013-07-04T09:02:08.870 回答
1

这将起作用:

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;
}

编辑:解除引用指针的小错误已解决

于 2013-07-04T08:54:54.650 回答
0

您应该写入(myS->A)[i]以访问第 i 个外部向量:将您的行重写为

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

但请注意,这将获取向量的副本。

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

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

于 2013-07-04T08:55:01.073 回答