如何从std :: stack <t,std :: vector <t =“”>&gt;获取非const迭代器?</t,>

时间:2014-01-27 10:20:36

标签: c++ iterator stdvector

我需要通过内部容器的内容进行迭代,但是允许我访问它的唯一方法是不变的:

const _Container& _Get_container() const
    {   // get reference to container
    return (c);
    }

所以我只能从内部向量的begin()中获取const迭代器。有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

你可以使用const_iterator来迭代元素,你就是无法修改它们。

如果你想修改对象,没有调用未定义的行为就无法做到 - 修改声明为const的对象是非法的。

答案 1 :(得分:2)

不,没有这样的方法。 std::stack(和类似的适配器)背后的想法是使用堆栈接口。通用堆栈只允许检查顶部元素。

从技术上讲,你不需要“堆栈”,你想要一个“可迭代堆栈”。并且标准库没有为此提供容器/适配器,因此您将不得不求助于

之一
  1. 实施您自己的

  2. 使用普通容器并手动维护类似堆栈的访问


  3. 旁注:我真的希望适配器实际提供迭代功能;毕竟,它们只是适配器,因此它们可以保证由适当的容器支持(或者只要支持容器可以提供迭代,它们至少可以提供迭代)。但它目前不是标准的一部分。