鱼C论坛

 找回密码
 立即注册
查看: 856|回复: 0

关于vector存储结构体的问题

[复制链接]
发表于 2022-3-23 19:59:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 闪亮的马路 于 2022-3-24 09:41 编辑

结构体定义如下:
struct GridNode
{     
    int id;        
    Eigen::Vector3d coord;
    Eigen::Vector3i dir;   // direction of expanding
    Eigen::Vector3i index;
       
    double gScore, fScore;
    GridNodePtr cameFrom;
    std::multimap<double, GridNodePtr>::iterator nodeMapIt;

    GridNode(Eigen::Vector3i _index, Eigen::Vector3d _coord){  
                id = 0;
                index = _index;
                coord = _coord;
                dir   = Eigen::Vector3i::Zero();

                gScore = inf;
                fScore = inf;
                cameFrom = NULL;
    }

    GridNode(const GridNode& g);
    GridNode(){};
    ~GridNode(){};
};
存储函数部分如下:
inline void AstarPathFinder::AstarGetSucc(GridNodePtr currentPtr, vector<GridNodePtr> & neighborPtrSets, vector<double> & edgeCostSets)
{   
    neighborPtrSets.clear();
    edgeCostSets.clear();

   Vector3i  init_index(0,0,0);
   Vector3d  init_coord(0,0,0);
   GridNodePtr  neighborPtrSet = new GridNode(init_index, init_coord);
  

   if (heuristic_type =="Manhattan")
   {
       //x-1
       if(isFree(currentPtr->index[0]-1,currentPtr->index[1],currentPtr->index[2]) &&
         !isOccupied(currentPtr->index[0]-1,currentPtr->index[1],currentPtr->index[2]))
       {
                       
           neighborPtrSet->id = 0;
           neighborPtrSet->index = currentPtr->index;
           neighborPtrSet->index[0] = currentPtr->index[0]-1;
           neighborPtrSet->coord = gridIndex2coord( neighborPtrSet->index);
           neighborPtrSet->dir = currentPtr->dir;
           neighborPtrSets.push_back(neighborPtrSet);
           edgeCostSets.push_back(1);
       }
       //x+1
       if(isFree(currentPtr->index[0]+1,currentPtr->index[1],currentPtr->index[2]) &&
         !isOccupied(currentPtr->index[0]+1,currentPtr->index[1],currentPtr->index[2]))
       {
                       

           neighborPtrSet->id = 0;
           neighborPtrSet->index = currentPtr->index;
           neighborPtrSet->index[0] = currentPtr->index[0]+1;
           neighborPtrSet->coord = gridIndex2coord( neighborPtrSet->index);
           neighborPtrSet->dir = currentPtr->dir;
           neighborPtrSets.push_back(neighborPtrSet);
           edgeCostSets.push_back(1);
       }

仿真发现neighborPtrSets存储的两个结构体共用了一个地址,数据也一样,该怎么修改呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 04:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表