草庐IT

Iterators

全部标签

c++ - STL 迭代器是否保证集合更改后的有效性?

假设我有某种集合,并且我在它的开头获得了一个迭代器。现在假设我修改了集合。无论集合或迭代器的类型如何,我仍然可以安全地使用迭代器吗?为避免混淆,以下是我所说的操作顺序:获取集合的迭代器。修改集合(显然不是其中的元素,而是集合本身)。使用第1步得到的迭代器,按照STL标准还有效吗?! 最佳答案 取决于容器。例如如果是vector,修改容器后所有的迭代器都会失效。但是,如果是list,则与修改的地方无关的迭代器将保持有效。Avector'siteratorsareinvalidatedwhenitsmemoryisreallocated

c++ - STL 迭代器是否保证集合更改后的有效性?

假设我有某种集合,并且我在它的开头获得了一个迭代器。现在假设我修改了集合。无论集合或迭代器的类型如何,我仍然可以安全地使用迭代器吗?为避免混淆,以下是我所说的操作顺序:获取集合的迭代器。修改集合(显然不是其中的元素,而是集合本身)。使用第1步得到的迭代器,按照STL标准还有效吗?! 最佳答案 取决于容器。例如如果是vector,修改容器后所有的迭代器都会失效。但是,如果是list,则与修改的地方无关的迭代器将保持有效。Avector'siteratorsareinvalidatedwhenitsmemoryisreallocated

c++ - 插入到 STL 映射是否会使其他现有迭代器失效?

我在STL中使用了std::map。我可以在将其他元素插入map后使用迭代器吗?还有效吗? 最佳答案 如果对容器操作的语义有疑问,请咨询thedocumentation:Maphastheimportantpropertythatinsertinganewelementintoamapdoesnotinvalidateiteratorsthatpointtoexistingelements.Erasinganelementfromamapalsodoesnotinvalidateanyiterators,except,ofcours

c++ - 插入到 STL 映射是否会使其他现有迭代器失效?

我在STL中使用了std::map。我可以在将其他元素插入map后使用迭代器吗?还有效吗? 最佳答案 如果对容器操作的语义有疑问,请咨询thedocumentation:Maphastheimportantpropertythatinsertinganewelementintoamapdoesnotinvalidateiteratorsthatpointtoexistingelements.Erasinganelementfromamapalsodoesnotinvalidateanyiterators,except,ofcours

c++ - 如何正确实现自定义迭代器和 const_iterators?

我有一个自定义容器类,我想为其编写iterator和const_iterator类。我以前从未这样做过,也没有找到合适的方法。关于迭代器创建的准则是什么?我应该注意什么?我还想避免代码重复(我觉得const_iterator和iterator共享很多东西;一个应该继承另一个吗?)。脚注:我很确定Boost可以缓解这种情况,但由于许多愚蠢的原因,我不能在这里使用它。 最佳答案 选择适合您容器的迭代器类型:输入、输出、转发等。使用标准库中的基迭代器类。例如,std::iterator使用random_access_iterator_ta

c++ - 如何正确实现自定义迭代器和 const_iterators?

我有一个自定义容器类,我想为其编写iterator和const_iterator类。我以前从未这样做过,也没有找到合适的方法。关于迭代器创建的准则是什么?我应该注意什么?我还想避免代码重复(我觉得const_iterator和iterator共享很多东西;一个应该继承另一个吗?)。脚注:我很确定Boost可以缓解这种情况,但由于许多愚蠢的原因,我不能在这里使用它。 最佳答案 选择适合您容器的迭代器类型:输入、输出、转发等。使用标准库中的基迭代器类。例如,std::iterator使用random_access_iterator_ta