C ++列表会擦除列表中的end()-1个元素

毛里齐奥

我有一个std::list<some_object> events,我想删除该列表中除最后一个元素之外的所有元素。因此,我想到了这样做(如该线程所建议):

std::list<some_object>::iterator it = events.begin(); // Init iterator on top of list
while(it!=*std::advance(events.end(),-1)) events.erase(it++);

不幸的是,上面的方法不起作用,因为它会产生错误:

error: invalid initialization of non-const reference of type ‘std::_List_iterator<node_info>&’ from an rvalue of type ‘std::__cxx11::list<node_info>::iterator {aka std::_List_iterator<node_info>}’
             while(it!=*std::advance(event_heap.end(),-1)){

但是,不list::end应该返回迭代器吗?我究竟做错了什么?

songyuanyao

但是,list :: end是否不应该返回迭代器?

是的,但是std::advance将非常量引用作为其第一个参数,而这event_heap.end()是一个临时变量,不能绑定到非常量引用。

并且不std::advance返回任何内容(即void),因此您无法使用operator*它或将其与进行比较it

直接修复将如下所示:

std::list<some_object>::iterator it = events.begin();
auto one_before_end = events.end();
std::advance(one_before_end, -1); // or --one_before_end;
while (it != one_before_end) events.erase(it++);

顺便说一句:std::list::erase具有重载迭代器范围,因此您可以:

events.erase(events.begin(), one_before_end);

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++列表会擦除列表中的end()-1个元素

来自分类Dev

从成对列表中擦除C ++

来自分类Dev

从struct类型列表中擦除元素

来自分类Dev

元组列表到元组 C# 列表中的第一个元素列表

来自分类Dev

删除列表c ++中的最后3个元素

来自分类Dev

删除列表c ++中的最后3个元素

来自分类Dev

从列表C中删除元素

来自分类Dev

将元素添加到字典中的列表会产生意外的结果 c#

来自分类Dev

如何获取不在另一个列表中的列表元素C#

来自分类Dev

除非元素大小设置为 +1,否则复制整数 .csv 的 C 程序会少复制一个元素

来自分类Dev

将4个列表另存为1个列表中的子列表元素

来自分类Dev

C#Interop Excel Range get_End返回少了1个元素

来自分类Dev

尝试在 C# 中创建一个列表,其元素是其他列表中元素的变体

来自分类Dev

C#中的LINQ。检查一个列表是否包含另一个列表中的元素

来自分类Dev

从C#中的列表内的列表中删除元素。

来自分类Dev

我应该如何使用谓词逻辑基于列表对象包含C#中另一个列表中的元素,而从通用列表中删除元素?

来自分类Dev

我应该如何使用谓词逻辑基于列表对象在C#中从另一个列表中包含元素,从而从通用列表中删除元素?

来自分类Dev

如何在C ++中访问2D动态数组中的1个元素

来自分类Dev

从列表向量中删除元素C ++

来自分类Dev

C ++:访问向量列表中的某些元素

来自分类Dev

C#Odata WebApi中的元素列表

来自分类Dev

在C ++中访问列表元素功能

来自分类Dev

从列表向量中删除元素C ++

来自分类Dev

从嵌套列表C#中删除元素

来自分类Dev

C ++:访问向量列表中的某些元素

来自分类Dev

C#Odata WebApi中的元素列表

来自分类Dev

使用递归C ++从列表中删除元素

来自分类Dev

无法删除 C++ 中的列表元素

来自分类Dev

如何删除C ++中添加到链接列表中的最后一个元素

Related 相关文章

  1. 1

    C ++列表会擦除列表中的end()-1个元素

  2. 2

    从成对列表中擦除C ++

  3. 3

    从struct类型列表中擦除元素

  4. 4

    元组列表到元组 C# 列表中的第一个元素列表

  5. 5

    删除列表c ++中的最后3个元素

  6. 6

    删除列表c ++中的最后3个元素

  7. 7

    从列表C中删除元素

  8. 8

    将元素添加到字典中的列表会产生意外的结果 c#

  9. 9

    如何获取不在另一个列表中的列表元素C#

  10. 10

    除非元素大小设置为 +1,否则复制整数 .csv 的 C 程序会少复制一个元素

  11. 11

    将4个列表另存为1个列表中的子列表元素

  12. 12

    C#Interop Excel Range get_End返回少了1个元素

  13. 13

    尝试在 C# 中创建一个列表,其元素是其他列表中元素的变体

  14. 14

    C#中的LINQ。检查一个列表是否包含另一个列表中的元素

  15. 15

    从C#中的列表内的列表中删除元素。

  16. 16

    我应该如何使用谓词逻辑基于列表对象包含C#中另一个列表中的元素,而从通用列表中删除元素?

  17. 17

    我应该如何使用谓词逻辑基于列表对象在C#中从另一个列表中包含元素,从而从通用列表中删除元素?

  18. 18

    如何在C ++中访问2D动态数组中的1个元素

  19. 19

    从列表向量中删除元素C ++

  20. 20

    C ++:访问向量列表中的某些元素

  21. 21

    C#Odata WebApi中的元素列表

  22. 22

    在C ++中访问列表元素功能

  23. 23

    从列表向量中删除元素C ++

  24. 24

    从嵌套列表C#中删除元素

  25. 25

    C ++:访问向量列表中的某些元素

  26. 26

    C#Odata WebApi中的元素列表

  27. 27

    使用递归C ++从列表中删除元素

  28. 28

    无法删除 C++ 中的列表元素

  29. 29

    如何删除C ++中添加到链接列表中的最后一个元素

热门标签

归档