gpt4 book ai didi

C++ const_iterator to iterator for forward_list

转载 作者:行者123 更新时间:2023-12-03 06:53:18 24 4
gpt4 key购买 nike

As per this question , 和 假设我有一个对容器本身的可变引用 ,可以使用以下方法安全地删除迭代器的常量性:

foo::const_iterator cit = ... ;
foo::iterator it = c.erase( cit, cit );
但是,这似乎不适用于 forward_list相当于, erase_after ,按照这个代码::
#include <iostream>
#include <forward_list>

typedef std::forward_list<int>::const_iterator CIT;
typedef std::forward_list<int>::iterator IT;

int main()
{
std::forward_list<int> m{1, 2, 3};

CIT cit = m.begin();
IT it = m.erase_after(cit, cit); // Segmentation fault!

std::cout << *it;
}
那么有没有办法删除这个类的const迭代器的constness?最好不是通过迭代!

最佳答案

您遇到了段错误,因为您违反了 erase_after() 的前提条件| , 表示范围 (first, last)传递给

iterator erase_after(const_iterator first, const_iterator last);
应该是一个有效的范围。请注意,这是 () - 范围类型,不是 [) ,所以两端都被排除在外。这就是为什么 (cit, cit)不是 erase_after 的有效范围.
海湾合作委员会与 -D_GLIBCXX_DEBUG complains :

Error: function requires a valid iterator range (__pos, __last), __pos shall be before and not equal to __last.

关于C++ const_iterator to iterator for forward_list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63725475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com