草庐IT

Iterator

全部标签

c++ - 在 C++11 foreach 循环中获取索引

有没有一种方便的方法可以在C++11foreach循环中获取当前容器条目的索引,例如python中的enumerate:foridx,objinenumerate(container):pass我可以想象一个也可以返回索引或类似的迭代器。当然我可以有一个计数器,但迭代器通常不保证它们在容器上的迭代顺序。 最佳答案 您所要求的功能的良好实现可以在这里找到:https://github.com/ignatz/pythonic背后的想法是,您使用自定义迭代器构建一个包装器结构来进行计数。下面是一个非常简单的示例实现来说明这个想法://Di

c++ - 在 C++11 foreach 循环中获取索引

有没有一种方便的方法可以在C++11foreach循环中获取当前容器条目的索引,例如python中的enumerate:foridx,objinenumerate(container):pass我可以想象一个也可以返回索引或类似的迭代器。当然我可以有一个计数器,但迭代器通常不保证它们在容器上的迭代顺序。 最佳答案 您所要求的功能的良好实现可以在这里找到:https://github.com/ignatz/pythonic背后的想法是,您使用自定义迭代器构建一个包装器结构来进行计数。下面是一个非常简单的示例实现来说明这个想法://Di

c++ - 何时编写迭代器?

我知道这可能是一个愚蠢的问题。我什么时候需要编写自己的迭代器?只是在设计我自己的容器类时?还有其他时候我想创建自己的迭代器吗?示例将被占用。-乔恩 最佳答案 是的,还有其他时间。举几个例子:一个过滤器迭代器,只返回容器中项目的过滤子集。仅返回对象的一部分的选择迭代器。一个ostream_iterator将分隔符放在项目之前或之间,而不是在它们之后。 关于c++-何时编写迭代器?,我们在StackOverflow上找到一个类似的问题: https://stack

c++ - 何时编写迭代器?

我知道这可能是一个愚蠢的问题。我什么时候需要编写自己的迭代器?只是在设计我自己的容器类时?还有其他时候我想创建自己的迭代器吗?示例将被占用。-乔恩 最佳答案 是的,还有其他时间。举几个例子:一个过滤器迭代器,只返回容器中项目的过滤子集。仅返回对象的一部分的选择迭代器。一个ostream_iterator将分隔符放在项目之前或之间,而不是在它们之后。 关于c++-何时编写迭代器?,我们在StackOverflow上找到一个类似的问题: https://stack

c++ - 控制反转的利弊

假设我有一个想要通过API公开的[acme]对象流。我有两个选择,回调和迭代器。API#1:回调//API#1//Thisfunctiontakesauser-definedcallback//andinvokesitforeachobjectinthestream.templatevoidProcessAcmeStream(CallbackFunctor&callback);API#2:迭代器//API#2//ProvidestheiteratorclassAcmeStreamIterator.AcmeStreamIteratormy_stream_begin=AcmeStreamI

c++ - 控制反转的利弊

假设我有一个想要通过API公开的[acme]对象流。我有两个选择,回调和迭代器。API#1:回调//API#1//Thisfunctiontakesauser-definedcallback//andinvokesitforeachobjectinthestream.templatevoidProcessAcmeStream(CallbackFunctor&callback);API#2:迭代器//API#2//ProvidestheiteratorclassAcmeStreamIterator.AcmeStreamIteratormy_stream_begin=AcmeStreamI

c++ - 使用迭代器与 const_iterator 调用删除

为什么用const_iterator调用容器的erase成员函数会失败?它适用于非constiterator。 最佳答案 这不会编译,因为container::iterator和container::const_iterator是两种不同的类型,唯一的(单参数)版本的删除是:迭代器删除(迭代器);不接受const_iterator可以被视为语言标准中的缺陷:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2350.pdf这种限制没有特别的原因。迭代器仅用于指示(可修改

c++ - 使用迭代器与 const_iterator 调用删除

为什么用const_iterator调用容器的erase成员函数会失败?它适用于非constiterator。 最佳答案 这不会编译,因为container::iterator和container::const_iterator是两种不同的类型,唯一的(单参数)版本的删除是:迭代器删除(迭代器);不接受const_iterator可以被视为语言标准中的缺陷:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2350.pdf这种限制没有特别的原因。迭代器仅用于指示(可修改

C++,实现函数时出现奇怪的编译器错误 `int next(std::string param)`

我被下面的代码严重咬了一口,浪费了我好几个小时的宝贵时间。#includeintnext(std::stringparam){return0;}voidfoo(){next(std::string{"abc"});}这会产生以下编译器错误(在VisualStudio2013上):1>------Buildstarted:Project:sandbox,Configuration:DebugWin32------1>test.cpp1>c:\programfiles(x86)\microsoftvisualstudio12.0\vc\include\xutility(371):error

C++,实现函数时出现奇怪的编译器错误 `int next(std::string param)`

我被下面的代码严重咬了一口,浪费了我好几个小时的宝贵时间。#includeintnext(std::stringparam){return0;}voidfoo(){next(std::string{"abc"});}这会产生以下编译器错误(在VisualStudio2013上):1>------Buildstarted:Project:sandbox,Configuration:DebugWin32------1>test.cpp1>c:\programfiles(x86)\microsoftvisualstudio12.0\vc\include\xutility(371):error