假设我有某种集合,并且我在它的开头获得了一个迭代器。现在假设我修改了集合。无论集合或迭代器的类型如何,我仍然可以安全地使用迭代器吗?为避免混淆,以下是我所说的操作顺序:获取集合的迭代器。修改集合(显然不是其中的元素,而是集合本身)。使用第1步得到的迭代器,按照STL标准还有效吗?! 最佳答案 取决于容器。例如如果是vector,修改容器后所有的迭代器都会失效。但是,如果是list,则与修改的地方无关的迭代器将保持有效。Avector'siteratorsareinvalidatedwhenitsmemoryisreallocated
假设我有某种集合,并且我在它的开头获得了一个迭代器。现在假设我修改了集合。无论集合或迭代器的类型如何,我仍然可以安全地使用迭代器吗?为避免混淆,以下是我所说的操作顺序:获取集合的迭代器。修改集合(显然不是其中的元素,而是集合本身)。使用第1步得到的迭代器,按照STL标准还有效吗?! 最佳答案 取决于容器。例如如果是vector,修改容器后所有的迭代器都会失效。但是,如果是list,则与修改的地方无关的迭代器将保持有效。Avector'siteratorsareinvalidatedwhenitsmemoryisreallocated
我在STL中使用了std::map。我可以在将其他元素插入map后使用迭代器吗?还有效吗? 最佳答案 如果对容器操作的语义有疑问,请咨询thedocumentation:Maphastheimportantpropertythatinsertinganewelementintoamapdoesnotinvalidateiteratorsthatpointtoexistingelements.Erasinganelementfromamapalsodoesnotinvalidateanyiterators,except,ofcours
我在STL中使用了std::map。我可以在将其他元素插入map后使用迭代器吗?还有效吗? 最佳答案 如果对容器操作的语义有疑问,请咨询thedocumentation:Maphastheimportantpropertythatinsertinganewelementintoamapdoesnotinvalidateiteratorsthatpointtoexistingelements.Erasinganelementfromamapalsodoesnotinvalidateanyiterators,except,ofcours
我有一个自定义容器类,我想为其编写iterator和const_iterator类。我以前从未这样做过,也没有找到合适的方法。关于迭代器创建的准则是什么?我应该注意什么?我还想避免代码重复(我觉得const_iterator和iterator共享很多东西;一个应该继承另一个吗?)。脚注:我很确定Boost可以缓解这种情况,但由于许多愚蠢的原因,我不能在这里使用它。 最佳答案 选择适合您容器的迭代器类型:输入、输出、转发等。使用标准库中的基迭代器类。例如,std::iterator使用random_access_iterator_ta
我有一个自定义容器类,我想为其编写iterator和const_iterator类。我以前从未这样做过,也没有找到合适的方法。关于迭代器创建的准则是什么?我应该注意什么?我还想避免代码重复(我觉得const_iterator和iterator共享很多东西;一个应该继承另一个吗?)。脚注:我很确定Boost可以缓解这种情况,但由于许多愚蠢的原因,我不能在这里使用它。 最佳答案 选择适合您容器的迭代器类型:输入、输出、转发等。使用标准库中的基迭代器类。例如,std::iterator使用random_access_iterator_ta