2013-07-04 203 views
0
struct myS { 
    std::vector<std::vector<double> > *A; 
} 

我想使用索引访问A的元素。我试过这个(以及其他版本),但它没有奏效。解引用不能用于std :: vector <std :: vector <double>>

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

为什么你在指针中有'std :: vector'? –

+2

动态分配'std :: vector'几乎没有合理的理由。 –

+0

这只是我在这里处理我的情况的一个虚拟结构。我的程序中的实际结构有多个字段,都是指针。我使用指针是因为它们不占用很多空间。该函数是suppossed返回多个向量,所以我用结构。 –

回答

3

重新放置支架:

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

该问题已被修改。我意识到一个小错误 –

+0

你试过我的解决方案吗?在通过运算符[] – hanslovsky

+0

访问矢量之前,您需要先取消引用指向该矢量的指针。是的。它可以工作。非常感谢。 –

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

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

​​

编辑:上废弃指针解决

+0

我使用指针来提高性能。 –

+1

在这种情况下,它不是很有用。这只有在你复制一个已经初始化的对象时才有用,因为它会复制所有成员,否则没有理由这样做。 –

+0

刚刚意识到我一直在返回指向局部变量的指针。你是对的。 –

0

你应该写(myS->A)[i]访问第i个外载体的小失误:重写你行

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

但请注意,这将需要副本的向量。

顺便问一下,你需要做(myS->A)[i][j]访问第j个元素在第i个外载体,

但为什么首先使用指针?

2

这编译:

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]; 
相关问题