问题标签 [iterator-traits]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
407 浏览

scala - 在扩展 trait Iterator 的类中覆盖方法 map 和 flatMap

作为一个 Scala 初学者,我试图为表达式Iterator中检索和处理的每个项目实现一个计数器,并且每次在for表达式的一个“循环”(外循环和嵌套循环)开始。counter = counter + 1要求是在不简单地在表达式中的多个位置放置语句的情况下完成此操作for。下面的清单显示了我对这个问题提出的解决方案,我想知道,为什么方法next实现Iterator的抽象成员被调用(并且相应的计数器增加),而flatMap覆盖map它们在 trait 中定义的挂件Iterator(并通过调用它们super)不是根本就叫。

对应的for表达式如下所示:

如果有人能给我提示如何以更好的方式解决给定的问题,我将不胜感激。但最重要的是,我很想知道为什么我的解决方案会覆盖Iterator'smap并且flatMap不像我有限的大脑所期望的那样工作;-)

问候

马丁

0 投票
2 回答
234 浏览

c++ - 迭代器的验证

我在一个 C++03 项目中工作。我正在将迭代器放入模板中。我需要断言这个迭代器引用了一个特定的类型。除了编写我自己的结构进行验证之外,C++ 是否为我提供了一种方法来做到这一点?

我想要的是这个 C++14 功能的等价物:

由于它是 C++03,我假设我必须使用 anassert并且如果它是一个仅运行时的调试检查,我只需要检查就可以了。

0 投票
2 回答
338 浏览

c++ - 可以从 istream_iterator 制作 move_iterator 吗?

考虑以下代码:

由于行 (!!!),上面的代码将无法编译:

但是,如果您分别用and替换mstartand (常规迭代器),则代码将编译。为什么我做不出来?meosstarteosmove_iterators

编辑: 对于那些想知道为什么我想从流/字符串中移动一个字符的人。char实际问题涉及比应避免从字符串复制更复杂的数据类型。char只是为了简单起见而使用,以呈现导致错误的机制。

0 投票
3 回答
355 浏览

c++11 - 使用 iterator_traits 从一对迭代器中推导出值类型

我有一个类型

我现在想使用 std::iterator_traits 来推断 Range 的迭代器指向的类型。

谁能告诉我如何从 Range 类型的对象中实现这一点?

0 投票
2 回答
795 浏览

c++ - 意外的模板实例化导致编译错误

我只是想知道为什么我的代码无法编译。下面的好吗?我正在尝试使用 Category1 和 Category2 typedef-s 声明一个简单的类。

Category1 typedef 可以正常编译,但 Category2 one 不能。

似乎无法编译 Category2 typedef,因为尽管未实例化周围的类 X,但仍实例化了类 iterator_traits<> ……对我来说似乎很困惑。

请注意,我不需要实例化类 X 来得到以下错误(以上是完整的编译单元)。

在 Visual Studio 2012 中,我得到了这个:

在 xutility(364) 中有:

我的情况是我想声明一个在构造函数中获取 lambda 的类。lambda 应该返回对容器的引用。而且我需要确定返回的容器是否具有随机访问迭代器。但是我遇到了这个编译错误。谢谢你的解释!

0 投票
1 回答
660 浏览

c++ - 如何获得两个迭代器之间的元素总数?

我编写了一个函数来测试容器中的所有元素是否都是唯一的。

有用。但是,size_tsize()difference_type从 ,返回distance()的符号不同。

std::distance可能会根据迭代器的方向返回负数。

如果是这种情况,当元素的数量超过有符号的最大值时,我如何可靠地获得两个迭代器之间的元素总数?我一直在寻找类似std::size的东西,但它需要一个完整的容器。

0 投票
2 回答
136 浏览

c++ - 为什么 std::reverse 需要双向迭代器?

为什么std::reverse(c.begin(), c.end())要求底层容器c提供双向迭代器

事实上,这意味着 (multi-) map, (multi-) set,但这些不能颠倒,当然,因为它们是有序的。唯一的其他双向容器是list但它有自己的成员函数.reverse()

这意味着一个人可以申请,std::reverse哪些是随机访问arrayvectordeque

那么,为什么不“诚实”地说:需要随机访问,或者使用成员函数?

0 投票
2 回答
2585 浏览

c++ - struct std::iterator_traits<...> 中没有名为“指针”的类型

以下是我的linked_list 模板的片段:

当我不using...注释行时,代码不会编译。

g++5.4:

ICP:

没有那行,所有编译都很好。

问题是:当我using difference_type = typename std::iterator_traits< iterator >::difference_type;在上面的代码中评论时会发生什么(只有这样的更改代码才能编译)。?

==================================================== ========================= res.on.functions/2.5

  1. 特别是,在以下情况下 效果是不确定的:...
    1. 如果在实例化模板组件时将不完整的类型([basic.types])用作模板参数,除非该组件特别允许。

以及对此的历史讨论

0 投票
1 回答
375 浏览

c++ - 为什么在模板函数中使用 iterator_traits 而不是仅仅使用另一个模板类型参数?

例如,参考cplusplus.com的这个片段:

问题是为什么iterator_traits在这种情况下使用而不是采用另一个模板参数,如下所示:

0 投票
0 回答
741 浏览

c++11 - How use std::iterator_traits for my custom container

I am implementing deque having the following structure:

I want to support apis like begin(), end(), cbegin() and cend() and they should return stl compliant iterators. I have heard that using std::iterator_traits it can be done. Help pointers in this regard is appreciated.

Also I want the iterators to be of type bidirectional.