C ++如何在两个不同的std :: lists中删除引用同一元素的指针?

用户名

我是使用c ++编程的新手,所以如果我的源代码不十分出色,请不要生我的气。

为了我的研究,我必须编写一个程序来处理图中的节点和边。

std::lists我的源代码中有2个第一个用于存储常规Nodes,第二个用于存储称为的节点的种类类ArticleNodes通常,所有元素都是指向创建的对象的指针。

为了弄清楚一个对象在另一个列表中是否相同,我保存了内存地址并将其与第二个列表中的元素进行比较。如果存在匹配项,则将删除第二个元素。

现在,我想删除两个列表中的一个元素:

void Graph::deleteNode(unsigned int nodeNumber)
{
    list<Node*>::iterator it = m_nodes.begin();
    ArticleNode* pCurrentArticleNode;
    for(unsigned int i=1; i<nodeNumber; i++) { it++; }

    Node* pCurrentNode = (*it);

    for (list<ArticleNode*>::iterator itArticle = m_articlenode.begin(); itArticle != m_articlenode.end(); itArticle++)
    {
        pCurrentArticleNode = (*itArticle);
        if(pCurrentNode==pCurrentArticleNode) { m_articlenode.remove(pCurrentArticleNode); }
    }

    m_nodes.remove(pCurrentNode);

    delete pCurrentNode;
    delete pCurrentArticleNode;
}

我可以编译它,但是当我调用该函数时,我的程序仅以return 1退出。实际上,我发现if子句中的remove-command是问题所在。为什么这样不起作用?

斯拉瓦

您应该使用算法,而不是手动完成所有操作:

void Graph::deleteNode(unsigned int nodeNumber)
{
    assert (nodeNumber < m_nodes.size());

    auto it = std::next( m_nodes.begin(), nodeNumber - 1 );

    auto itArticle = std::find( m_articlenode.begin(), m_articlenode.end(), *it );
    if( itArticle != m_articlenode.end() )
        m_articlenode.erase( itArticle );

    delete *it;
    m_nodes.erase(it);
}

顺便说一句,您的代码两次删除同一对象。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在AngularJS的同一元素上嵌套两个指令?

来自分类Dev

C#-如何在两个不同的dll中引用同一类型?

来自分类Dev

如何在C ++中重载两个不同的I / O运算符

来自分类Dev

如何在C#图表中添加两个不同的类型系列?

来自分类Dev

如何在C#图表中添加两个不同的类型系列?

来自分类Dev

我们如何在Framerjs的同一元素上添加两个事件?

来自分类Dev

如何在同一元素上有两个事件?(单击和取消单击)

来自分类Dev

C ++数据结构可存储两个唯一元素集之间的多个关系

来自分类Dev

如何使用SASS引用同一元素上的多个子类

来自分类Dev

Boost或C ++ 11中是否有一个充当队列但具有唯一元素的容器?

来自分类Dev

使用C ++中的std ::算法输出`std :: multiset`的唯一元素及其频率,输出(无循环)

来自分类Dev

如何删除同一元素上的重复类

来自分类Dev

如何在ng-show中多次显示同一元素?

来自分类Dev

如何在C ++中找到数组的最小和唯一元素?

来自分类Dev

为什么同一元素的两个不同事件不能使用slideUp()?

来自分类Dev

使同一元素上的两个(或更多)变换协同工作

来自分类Dev

同一元素上的两个动画不起作用

来自分类Dev

在同一元素上使用两个Angular指令

来自分类Dev

同一元素上的两个动画不起作用

来自分类Dev

如何对车把中的同一元素进行绑定和操作?

来自分类Dev

如何在C中链接两个文件

来自分类Dev

C ++中的指针同一变量具有两个不同的地址

来自分类Dev

C ++中的指针同一变量具有两个不同的地址

来自分类Dev

如何从数组中获取一个随机元素而又不多次获取同一元素?

来自分类Dev

如何在同一元素上设置不同的工具提示和确认标题?

来自分类Dev

如何在Visual Studio / C#中添加对同一API的两个版本的引用

来自分类Dev

如何在C ++中的两个单独的向量中保存两个数据集

来自分类Dev

如何在枚举C#中为同一定义设置两个值

来自分类Dev

如何在openGL c ++中的同一窗口中绘制两个对象?

Related 相关文章

  1. 1

    如何在AngularJS的同一元素上嵌套两个指令?

  2. 2

    C#-如何在两个不同的dll中引用同一类型?

  3. 3

    如何在C ++中重载两个不同的I / O运算符

  4. 4

    如何在C#图表中添加两个不同的类型系列?

  5. 5

    如何在C#图表中添加两个不同的类型系列?

  6. 6

    我们如何在Framerjs的同一元素上添加两个事件?

  7. 7

    如何在同一元素上有两个事件?(单击和取消单击)

  8. 8

    C ++数据结构可存储两个唯一元素集之间的多个关系

  9. 9

    如何使用SASS引用同一元素上的多个子类

  10. 10

    Boost或C ++ 11中是否有一个充当队列但具有唯一元素的容器?

  11. 11

    使用C ++中的std ::算法输出`std :: multiset`的唯一元素及其频率,输出(无循环)

  12. 12

    如何删除同一元素上的重复类

  13. 13

    如何在ng-show中多次显示同一元素?

  14. 14

    如何在C ++中找到数组的最小和唯一元素?

  15. 15

    为什么同一元素的两个不同事件不能使用slideUp()?

  16. 16

    使同一元素上的两个(或更多)变换协同工作

  17. 17

    同一元素上的两个动画不起作用

  18. 18

    在同一元素上使用两个Angular指令

  19. 19

    同一元素上的两个动画不起作用

  20. 20

    如何对车把中的同一元素进行绑定和操作?

  21. 21

    如何在C中链接两个文件

  22. 22

    C ++中的指针同一变量具有两个不同的地址

  23. 23

    C ++中的指针同一变量具有两个不同的地址

  24. 24

    如何从数组中获取一个随机元素而又不多次获取同一元素?

  25. 25

    如何在同一元素上设置不同的工具提示和确认标题?

  26. 26

    如何在Visual Studio / C#中添加对同一API的两个版本的引用

  27. 27

    如何在C ++中的两个单独的向量中保存两个数据集

  28. 28

    如何在枚举C#中为同一定义设置两个值

  29. 29

    如何在openGL c ++中的同一窗口中绘制两个对象?

热门标签

归档