C ++将对象保存在列表中以供以后重用

银色闪光

假设我拥有保存在矢量中的边列表,例如:

typedef struct edge
{
  int v;
  size_t start;
  size_t end;
}e;

typedef vector<list<e>> adj_list;
adj_list tree;

我必须对此tree对象执行逻辑,但是逻辑太复杂而无法就地执行(仅限于不可递归)。我需要一个额外的数据结构来处理每个节点。作为一个简单的示例,让我们考虑增加每个边的v值:

list<e> aux;
  aux.insert(aux.begin(), tree[0].begin(), tree[0].end());
  while (!aux.empty())
    {
      e& now = aux.front();
      aux.pop_front();
      now.v++;
      aux.insert(aux.begin(), tree[now.v].begin(), tree[now.v].end());
      
    }

这样做的问题是,对now变量所做的更改未反映中的值tree我需要一个列表(可以是任何列表(向量,链接的,队列,堆栈),其具有像Dijkstra这样的empty()布尔值)ds来处理我的edge对象tree有没有一种优雅的方法可以做到这一点?我可以使用迭代器列表吗?我特别要求一种“优雅”的方法,希望它不涉及指针。

邪恶的绵羊

如评论中所述,解决方案是存储迭代器而不是副本,例如:

list<list<e>::iterator> aux;
aux.insert(aux.begin(), tree[0].begin(), tree[0].end());
while (!aux.empty())
{
  e& now = *(aux.front());
  aux.pop_front();
  now.v++;
  aux.insert(aux.begin(), tree[now.v].begin(), tree[now.v].end());    
}

仅当您可以确保没有任何东西会使存储的迭代器无效(例如,某些操作tree可以这样做)时,此方法才有效。

n所指出的代词 迭代器可以看作是“通用指针”,因此常规指针也有许多问题也适用于迭代器。

另一种(稍微安全些)的方法是将std::shared_ptrs存储在的内部列表中tree-然后您可以简单地s存储std::shared_ptr在同一对象中aux,以确保在仍然引用该对象时不会意外删除该对象

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将对象的C#列表转换为对象的JavaScript数组

来自分类Dev

C#保存对象列表与保存对象(来自JSON)

来自分类Dev

将对象列表保存在xml文件中

来自分类Dev

将对象列表导出到C#中的xml文件

来自分类Dev

如何在画布上保存绘图以供以后在Android中重用?

来自分类Dev

在列表中将对象的字段添加到C#中的列表中

来自分类Dev

将对象保存在数组中以获得高分列表

来自分类Dev

我是否需要将Intent对象保存在onSaveInstanceState()中以供以后使用?

来自分类Dev

在C#中将对象添加到列表

来自分类Dev

C#-将对象保存到JSON文件

来自分类Dev

将对象列表保存在onSaveInstanceState中

来自分类Dev

将对象的数组列表保存在txt文件中

来自分类Dev

如何将对象列表作为函数中的参数传递,然后使用对象的属性C#

来自分类Dev

如何捕获函数参数并存储函数指针以供以后在C ++ 11中执行?

来自分类Dev

将用户输入数据保存在kivy中并存储以供以后使用/分析python

来自分类Dev

将对象添加到链接列表C ++

来自分类Dev

将对象列表保存在xml文件中

来自分类Dev

如何在画布上保存绘图以供以后在android中重用?

来自分类Dev

将数据持久保存在类中,以供其他函数重用

来自分类Dev

将对象实例保存在mongoDB中?

来自分类Dev

从文件中逐行读取并保存在列表C中

来自分类Dev

C ++将对象的引用保存在变量中

来自分类Dev

如何将方法保存在类中以供以后执行

来自分类Dev

将数据库行ID保存在会话中以供以后使用

来自分类Dev

将对象数组添加到 C# 中的列表视图

来自分类Dev

如何使用C#检查对象列表中是否已存在对象

来自分类Dev

将变量存储在文件中以供以后重用

来自分类Dev

将对象列表保存到 csv c# asp.net

来自分类Dev

如何使用 C# Expression API 将对象列表作为 Lamba 中的参数

Related 相关文章

  1. 1

    将对象的C#列表转换为对象的JavaScript数组

  2. 2

    C#保存对象列表与保存对象(来自JSON)

  3. 3

    将对象列表保存在xml文件中

  4. 4

    将对象列表导出到C#中的xml文件

  5. 5

    如何在画布上保存绘图以供以后在Android中重用?

  6. 6

    在列表中将对象的字段添加到C#中的列表中

  7. 7

    将对象保存在数组中以获得高分列表

  8. 8

    我是否需要将Intent对象保存在onSaveInstanceState()中以供以后使用?

  9. 9

    在C#中将对象添加到列表

  10. 10

    C#-将对象保存到JSON文件

  11. 11

    将对象列表保存在onSaveInstanceState中

  12. 12

    将对象的数组列表保存在txt文件中

  13. 13

    如何将对象列表作为函数中的参数传递,然后使用对象的属性C#

  14. 14

    如何捕获函数参数并存储函数指针以供以后在C ++ 11中执行?

  15. 15

    将用户输入数据保存在kivy中并存储以供以后使用/分析python

  16. 16

    将对象添加到链接列表C ++

  17. 17

    将对象列表保存在xml文件中

  18. 18

    如何在画布上保存绘图以供以后在android中重用?

  19. 19

    将数据持久保存在类中,以供其他函数重用

  20. 20

    将对象实例保存在mongoDB中?

  21. 21

    从文件中逐行读取并保存在列表C中

  22. 22

    C ++将对象的引用保存在变量中

  23. 23

    如何将方法保存在类中以供以后执行

  24. 24

    将数据库行ID保存在会话中以供以后使用

  25. 25

    将对象数组添加到 C# 中的列表视图

  26. 26

    如何使用C#检查对象列表中是否已存在对象

  27. 27

    将变量存储在文件中以供以后重用

  28. 28

    将对象列表保存到 csv c# asp.net

  29. 29

    如何使用 C# Expression API 将对象列表作为 Lamba 中的参数

热门标签

归档