struct myS {
std::vector<std::vector<double> > *A;
}
我想使用索引访问A的元素。我试过这个(以及其他版本),但它没有奏效。解引用不能用于std :: vector <std :: vector <double>>
struct myS test;
std::vector<double> B = *(test.A)[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];
重新放置支架:
std::vector<double> B = (*test.A)[0];
该问题已被修改。我意识到一个小错误 –
你试过我的解决方案吗?在通过运算符[] – hanslovsky
访问矢量之前,您需要先取消引用指向该矢量的指针。是的。它可以工作。非常感谢。 –
这将工作:
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];
另一个问题:你为什么要使用矢量在这种情况下的结构?在我看来,你不应该在你的结构中有这个指针。它应该是这样的值:
编辑:上废弃指针解决
我使用指针来提高性能。 –
在这种情况下,它不是很有用。这只有在你复制一个已经初始化的对象时才有用,因为它会复制所有成员,否则没有理由这样做。 –
刚刚意识到我一直在返回指向局部变量的指针。你是对的。 –
你应该写(myS->A)[i]
访问第i个外载体的小失误:重写你行
std::vector B = (myS->A)[0]
;
但请注意,这将需要值副本的向量。
顺便问一下,你需要做(myS->A)[i][j]
访问第j个元素在第i个外载体,
但为什么首先使用指针?
这编译:
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];
为什么你在指针中有'std :: vector'? –
动态分配'std :: vector'几乎没有合理的理由。 –
这只是我在这里处理我的情况的一个虚拟结构。我的程序中的实际结构有多个字段,都是指针。我使用指针是因为它们不占用很多空间。该函数是suppossed返回多个向量,所以我用结构。 –