取消引用对 std::vector<std::vector<double> >不起作用
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 个元素,
但是为什么要首先使用指针呢?
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中