gpt4 book ai didi

c++ - 如何删除 const_iterator 的常量性?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:11 26 4
gpt4 key购买 nike

作为这个问题的延伸 Are const_iterators faster? , 我还有一个关于 const_iterators 的问题.如何删除 const_iterator 的常量?虽然迭代器是指针的一般形式,但仍然是 const_iteratoriterator这是两个不同的东西。因此,我相信,我也不能使用 const_cast<>const_iterator 隐藏至 iterator

一种方法可能是您定义一个迭代器,该迭代器移动“直到 const_iterator 到的元素”点。但这看起来是一个线性时间算法。

关于实现此目标的最佳方法有什么想法吗?

最佳答案

在C++11中有一个时间复杂度恒定的解决方案:对于任何序列、关联或无序的关联容器(包括所有的标准库容器),你可以用空范围调用范围删除成员函数:

template <typename Container, typename ConstIterator>
typename Container::iterator remove_constness(Container& c, ConstIterator it)
{
return c.erase(it, it);
}

范围删除成员函数有一对const_iterator 参数,但它们返回一个iterator。因为提供了空范围,所以调用删除不会更改容器的内容。

Hat tip to Howard Hinnant and Jon Kalb for this trick.

关于c++ - 如何删除 const_iterator 的常量性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20713143/

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