我需要通过内部容器的内容进行迭代,但是允许我访问它的唯一方法是不变的:
const _Container& _Get_container() const
{ // get reference to container
return (c);
}
所以我只能从内部向量的begin()中获取const迭代器。有什么方法可以解决这个问题吗?
答案 0 :(得分:4)
你可以使用const_iterator
来迭代元素,你就是无法修改它们。
如果你想修改对象,没有调用未定义的行为就无法做到 - 修改声明为const
的对象是非法的。
答案 1 :(得分:2)
不,没有这样的方法。 std::stack
(和类似的适配器)背后的想法是仅使用堆栈接口。通用堆栈只允许检查顶部元素。
从技术上讲,你不需要“堆栈”,你想要一个“可迭代堆栈”。并且标准库没有为此提供容器/适配器,因此您将不得不求助于
之一实施您自己的
使用普通容器并手动维护类似堆栈的访问
旁注:我真的希望适配器实际提供迭代功能;毕竟,它们只是适配器,因此它们可以保证由适当的容器支持(或者只要支持容器可以提供迭代,它们至少可以提供迭代)。但它目前不是标准的一部分。