两个类都有指向每个的指针向量

萨斯

嗨,我想为2D网格制作代码。我有两个类的顶点和元素。每个顶点都应有一个指向相邻元素的指针向量。同样,每个元素都应具有一个指向相邻顶点的指针向量。我做到了 但是,当我尝试访问邻居一段时间时,会得到错误的结果。这是我的清单

#include <iostream>
#include <vector>
using namespace std;

struct A;
struct B;

struct A
{
    vector<B*> vbs;
    A(int aa)
    {
        a=aa;
    }
    int a;
};

struct B
{
    vector<A*> vas;
    B(int bb)
    {
        b=bb;
    }
    int b;
};

int main()
{
    vector<A> VA;
    vector<B> VB;
    for(int i=0;i<11;i++)
    {
        VA.push_back(A(i));
        VB.push_back(B(10-i));

        VA.back().vbs.push_back(&VB.back());
        VB.back().vas.push_back(&VA.back());
    }
    for(int i=0;i<11;i++)
    {
        cout<<"A["<< i<<"]= "<<VA[i].a 
        <<" :::: " <<VA[i].vbs.size() <<" :: " <<VA[i].vbs[0]->b <<endl;
    }
    for(int i=0;i<11;i++)
    {
        cout<<"B["<< i<<"]= " <<VB[i].b
        <<" :::: " <<VB[i].vas.size() <<" :: " <<VB[i].vas[0]->a  <<endl;
    }
}

这是我的案例的一个最小示例。ideone.com的结果是

A[0]= 0 :::: 1 :: 10
A[1]= 1 :::: 1 :: 9
A[2]= 2 :::: 1 :: -1216846712
A[3]= 3 :::: 1 :: -1216846728
A[4]= 4 :::: 1 :: 6
A[5]= 5 :::: 1 :: 5
A[6]= 6 :::: 1 :: 4
A[7]= 7 :::: 1 :: 3
A[8]= 8 :::: 1 :: 2
A[9]= 9 :::: 1 :: 1
A[10]= 10 :::: 1 :: 0
B[0]= 10 :::: 1 :: 0
B[1]= 9 :::: 1 :: 1
B[2]= 8 :::: 1 :: 17
B[3]= 7 :::: 1 :: 17
B[4]= 6 :::: 1 :: 193
B[5]= 5 :::: 1 :: 5
B[6]= 4 :::: 1 :: 6
B[7]= 3 :::: 1 :: 7
B[8]= 2 :::: 1 :: 8
B[9]= 1 :::: 1 :: 9
B[10]= 0 :::: 1 :: 10

如您所见,A [2],A [3],B [2],B [3]和B [4]是错误的,我做错了。这是否可能是编译器中的错误

问候

保罗·麦肯齐

更改向量的大小会使迭代器无效,因此指向向量元素的指针可能在此处无效:

    VA.back().vbs.push_back(&VB.back());
    VB.back().vas.push_back(&VA.back())

如果您正在做这样的事情,请重新考虑您的设计。在矢量中存储指向元素的指针是一条危险的道路。

其他答案中给出了一些解决方案。另一个可能的解决方案是使用astd::list而不是vector,因为list迭代器不会无效(仅当删除列表中的项目时,迭代器才会对删除的项目无效)。

另一个解决方案是调用reserve()具有最大预期项目数的向量但是,如果矢量的项目数超过保留的数量,即使这样也很不稳定。最好重新考虑您在做什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

字典中的每个值都有两个键

来自分类Dev

两个arrayLists,每个对象都有自己的List

来自分类Dev

两个带有成员函数的类,它们从另一个类获取指向对象的指针

来自分类Dev

基于两个属性对类指针的向量进行排序?

来自分类Dev

两个NIC,两个网关,每个下都有多个别名

来自分类Dev

比较Java中的两个对象..每个对象都有两个字段

来自分类Dev

我有两个单元,每个单元都有一个类,它们彼此需要起作用。如何避免循环引用?

来自分类Dev

我如何区分两个端点,每个端点都有一个 PathVariable?

来自分类Dev

合并两个 sql 查询,每个查询都有一个 with 子句

来自分类Dev

检查两个(智能)指针是否指向同一个派生类

来自分类Dev

两个或两个以上的表,每个表中都有uniq num的序列号

来自分类Dev

Hadoop 2:为什么每个 map 或 reduce 任务都有两个 linux 进程?

来自分类Dev

结合两个WiFi网络,每个都有自己的互联网

来自分类Dev

对齐两个时间序列,每个时间序列之间都有间隔

来自分类Dev

为什么每个GraphQL查询/突变都有“两个名称”?

来自分类Dev

连接两个网络(每个都有独立的互联网连接)

来自分类Dev

RecyclerView中的两个对象类型,每个对象类型都有自己的ViewHolder

来自分类Dev

两个嵌套的 for,在 python 中每个语句下都有几个语句

来自分类Dev

为什么在检查点上每个层都有两个附加变量?

来自分类Dev

两个按钮形式,每个都有不同之处

来自分类Dev

Haskell-在每个节点中都有两个变量的树

来自分类Dev

我如何在pygame中处理两个按键,每个按键都有各自的间隔

来自分类Dev

两个不同的屏幕,每个屏幕都有摄像头

来自分类Dev

展开两个 Excel 列,每个列都有多个对应的值

来自分类Dev

从两个向量创建列表,每个向量的每个组合

来自分类Dev

设计一个带有两个指向嵌套对象的指针的迭代器

来自分类Dev

当两个输入都有值时如何向元素添加类

来自分类Dev

指向类对象的指针的向量

来自分类Dev

C ++两个对象,它们持有指向同一数组不同部分的指针

Related 相关文章

  1. 1

    字典中的每个值都有两个键

  2. 2

    两个arrayLists,每个对象都有自己的List

  3. 3

    两个带有成员函数的类,它们从另一个类获取指向对象的指针

  4. 4

    基于两个属性对类指针的向量进行排序?

  5. 5

    两个NIC,两个网关,每个下都有多个别名

  6. 6

    比较Java中的两个对象..每个对象都有两个字段

  7. 7

    我有两个单元,每个单元都有一个类,它们彼此需要起作用。如何避免循环引用?

  8. 8

    我如何区分两个端点,每个端点都有一个 PathVariable?

  9. 9

    合并两个 sql 查询,每个查询都有一个 with 子句

  10. 10

    检查两个(智能)指针是否指向同一个派生类

  11. 11

    两个或两个以上的表,每个表中都有uniq num的序列号

  12. 12

    Hadoop 2:为什么每个 map 或 reduce 任务都有两个 linux 进程?

  13. 13

    结合两个WiFi网络,每个都有自己的互联网

  14. 14

    对齐两个时间序列,每个时间序列之间都有间隔

  15. 15

    为什么每个GraphQL查询/突变都有“两个名称”?

  16. 16

    连接两个网络(每个都有独立的互联网连接)

  17. 17

    RecyclerView中的两个对象类型,每个对象类型都有自己的ViewHolder

  18. 18

    两个嵌套的 for,在 python 中每个语句下都有几个语句

  19. 19

    为什么在检查点上每个层都有两个附加变量?

  20. 20

    两个按钮形式,每个都有不同之处

  21. 21

    Haskell-在每个节点中都有两个变量的树

  22. 22

    我如何在pygame中处理两个按键,每个按键都有各自的间隔

  23. 23

    两个不同的屏幕,每个屏幕都有摄像头

  24. 24

    展开两个 Excel 列,每个列都有多个对应的值

  25. 25

    从两个向量创建列表,每个向量的每个组合

  26. 26

    设计一个带有两个指向嵌套对象的指针的迭代器

  27. 27

    当两个输入都有值时如何向元素添加类

  28. 28

    指向类对象的指针的向量

  29. 29

    C ++两个对象,它们持有指向同一数组不同部分的指针

热门标签

归档