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

时间:2013-07-04 08:52:11

标签: c++ vector std

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

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

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

4 个答案:

答案 0 :(得分:3)

重新定位括号:

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

答案 1 :(得分: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];

答案 2 :(得分: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;
}

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

答案 3 :(得分:0)

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

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

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

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

但为什么首先使用指针?