Tag: 迭代器

是否有可能开始迭代从第一个使用foreach以外的元素?

我正在考虑为自定义集合(一棵树)实现IEnumerable,所以我可以使用foreach来遍历我的树。 但据我所知,foreach总是从集合的第一个元素开始。 我想selectforeach从哪个元素开始。 是否有可能以某种方式改变foreach开始的元素?

c ++ 11 foreach语法和自定义迭代器

我正在写一个容器的迭代器,用于代替STL容器。 目前,在许多地方使用c ++ 11 foreach语法来使用STL容器,例如: for(auto &x: C) 。 我们需要更新代码以使用包装STL容器的自定义类: template< typename Type> class SomeSortedContainer{ std::vector<typename Type> m_data; //we wish to iterate over this //container implementation code }; class SomeSortedContainerIterator{ //iterator code }; 我如何让自动使用正确的迭代器的自定义容器,以便能够以下面的方式调用代码? SomeSortedContainer C; for(auto &x : C){ //do something with x… } 一般来说,确保auto为类使用正确的迭代器需要什么?

如何使用迭代器浏览vector? (C ++)

目标是访问stringvector的“nth”元素,而不是[]运算符或“at”方法。 据我所知,迭代器可以用来浏览容器,但我从来没有使用过迭代器,而我正在阅读的内容令人困惑。 如果有人可以给我一些关于如何实现这一目标的信息,我将不胜感激。 谢谢。

在地图操作中元组拆包

我经常发现自己在处理元组的列表,序列和迭代器,并且想要做如下的事情, val arrayOfTuples = List((1, "Two"), (3, "Four")) arrayOfTuples.map { (e1: Int, e2: String) => e1.toString + e2 } 然而,编译器似乎从来没有认同这个语法。 相反,我最终写作, arrayOfTuples.map { t => val e1 = t._1 val e2 = t._2 e1.toString + e2 } 这是愚蠢的。 我怎样才能解决这个问题?

获得迭代器的数量/长度/大小的最佳方法是什么?

有一个“计算上”的快速方法来获得一个迭代器的计数? int i = 0; for ( ; some_iterator.hasNext() ; ++i ) some_iterator.next(); 似乎浪费CPU周期。

在C ++ 11基于范围的for循环中查找元素的位置?

假设我有以下代码: vector<int> list; for(auto& elem:list) { int i = elem; } 我可以在vector中findelem的位置,而不需要维护一个单独的迭代器吗?

迭代器和枚举器之间的区别

一个.NET 3.5作业的面试问题是“迭代器和枚举器有什么区别”? 这是一个核心区别,用LINQ来做什么等等。 无论如何,有什么区别? 我似乎无法在网上find一个可靠的定义。 没有错,我可以find两个术语的含义,但我得到的答案略有不同。 面试的最佳答案是什么? IMO一个迭代器“迭代”一个集合,一个枚举器提供迭代的function,但是这个必须被调用。 而且,使用yield关键字被认为是保存状态。 这个状态到底是什么? 有没有这种好处发生的例子?

单线程来检查一个迭代器是否至less产生一个元素?

目前我正在这样做: try: something = iterator.next() # … except StopIteration: # … 但我想要一个expression式,我可以放在一个简单的if语句中。 有什么内置的,这将使这个代码看起来不那么笨拙? 如果一个iterable是空的,则any()返回False ,但如果不是,则它将会遍历所有的项目。 我只需要检查第一个项目。 有人问我在做什么。 我已经写了一个函数,执行一个SQL查询并产生结果。 有时当我调用这个函数时,我只想知道查询是否返回任何内容,并根据这个做出决定。

Rails:在数据库中没有元素时显示消息的一种优雅的方式

我意识到,我正在写很多类似于这个的代码: <% unless @messages.blank? %> <% @messages.each do |message| %> <%# code or partial to display the message %> <% end %> <% else %> You have no messages. <% end %> Ruby和/或Rails中是否有构造可以让我跳过第一个条件? 那么,迭代器/循环将不会进入一次? 例如: <% @messages.each do |message| %> <%# code or partial to display the message %> <% and_if_it_was_blank %> You have no […]

移动vector是否使迭代器无效?

如果我有一个向量的迭代器,那么我移动构造或移动 – 从该向量分配另一个向量,该迭代器是否仍然指向新向量中的有效元素? 这是一个简单的例子: #include <vector> #include <iostream> int main(int argc, char *argv[]) { std::vector<int>::iterator a_iter; std::vector<int> b; { std::vector<int> a{1, 2, 3, 4, 5}; a_iter = a.begin() + 2; b = std::move(a); } std::cout << *a_iter << std::endl; return 0; } 是a_iter仍然是有效的,因为a被移入b ,或者被移动无效的迭代器? 作为参考, std::vector::swap 不会使迭代器失效 。