【问题标题】:Number of permissible active iterators into a vector向量中允许的活动迭代器的数量
【发布时间】:2011-03-26 15:02:47
【问题描述】:

例如以下是否有效?

std::vector<int> vec(5, 0);
std::vector<int>::const_iterator it1(vec.begin());
std::vector<int>::const_iterator it2(vec.begin());
//Use it1 and it2 like they don't know about each other.

允许多个活动迭代器的容器是否有特殊名称?

【问题讨论】:

    标签: c++ templates vector iterator standards


    【解决方案1】:

    是的,它是有效的。

    您可以将尽可能多的迭代器放入一个向量中,因为您的系统有足够的内存来保存迭代器。

    这种容器的特殊名称是“任何 STL 容器”。所有容器都允许这样做。

    也许可以解释一下为什么您认为这不应该被允许?

    【讨论】:

      【解决方案2】:

      这绝对是允许的。您必须担心的是您是否开始擦除或插入元素。不同的容器通过修改函数来使迭代器失效有不同的行为,您必须查看文档。例如,vector 上的 erase 会使删除元素之后的所有迭代器和元素引用无效。

      【讨论】:

        【解决方案3】:

        只要您不执行使其他迭代器无效的操作,迭代器的数量就没有任何限制。某些操作(如插入或删除)可能会使所有其他迭代器无效。 STL 容器迭代器的工作方式,它们无法(通常)处理通过其他迭代器完成的插入和删除。

        请注意,使用容器函数插入/删除元素也会导致迭代器无效。

        根本问题是 STL 容器对活动迭代器一无所知,因此它们无法告诉迭代器发生了变化。

        【讨论】:

          猜你喜欢
          • 2017-08-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多