Questions tagged «iterator»

迭代器是一种面向对象的编程模式,它允许遍历整个集合,而与物理内存中的实际实现或对象地址无关。它是“四人帮”的行为设计模式之一。


4
移动向量会使迭代器无效吗?
如果我在vector中有一个迭代器a,那么我b从中移动向量或移动分配向量a,该迭代器是否仍指向同一元素(现在在vector中b)?这就是我在代码中的意思: #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; // Is a_iter valid here? return 0; } 是否a_iter仍然有效的,因为a已移入b,或者是通过招无效的迭代器?供参考,std::vector::swap 不会使迭代器无效。
70 c++  iterator  c++11 

8
如果递增等于STL容器的最终迭代器的迭代器会发生什么
如果将指向向量的最后一个元素的迭代器加2,该怎么办?在这个问题中,如何通过2个元素将迭代器调整为STL容器,提供了两种不同的方法: 要么使用一种形式的算术运算符-+ = 2或++两次 或使用std :: advance() 当迭代器指向STL容器的最后一个元素或其他元素时,我已经用VC ++ 7测试了它们的边缘情况: vector<int> vec; vec.push_back( 1 ); vec.push_back( 2 ); vector<int>::iterator it = vec.begin(); advance( it, 2 ); bool isAtEnd = it == vec.end(); // true it++; // or advance( it, 1 ); - doesn't matter isAtEnd = it == vec.end(); //false …
70 c++  stl  vector  iterator 

4
迭代器的默认值是多少?
对于我正在使用的任何STL容器,如果我使用迭代器的默认构造函数声明一个(此特定容器类型的)迭代器,则该迭代器将初始化为什么? 例如,我有: std::list<void*> address_list; std::list<void*>::iterator iter; 将初始化什么?

10
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 %> …

3
哪些字符与Array.from分组?
我一直在玩JS,无法弄清楚JS在使用时如何决定将哪些元素添加到创建的数组中Array.from()。例如,以下表情符号👍的a length为2,因为它由两个代码点组成,但是Array.from()将这两个代码点视为1,从而给出了一个元素数组: const emoji = '👍'; console.log(Array.from(emoji)); // Output: ["👍"] 运行代码段Hide results展开摘要 但是,某些其他字符也有两个代码点,例如此字符षि(也具有.length2个字符)。但是,Array.from不要将此字符“分组”,而是产生两个元素: const str = 'षि'; console.log(Array.from(str)); // Output: ["ष", "ि"] 运行代码段Hide results展开摘要 我的问题是:当字符由两个代码点组成时,是什么决定字符被分解(如示例2)还是被视为一个元素(如示例1)?

2
在JavaScript ES6中,可迭代和迭代器之间有什么区别?
可迭代与迭代器相同还是不同? 从规范中看来,一个可迭代对象是一个对象,例如,obj它obj[Symbol.iterator]引用一个函数,以便在被调用时返回一个对象,该对象具有next可以返回该{value: ___, done: ___}对象的方法: function foo() { let i = 0; const wah = { next: function() { if (i <= 2) return { value: (1 + 2 * i++), done: false } else return { value: undefined, done: true } } }; return wah; // wah is iterator …

1
removeIf实现细节
我有一个小的实施细节问题,我在中无法理解ArrayList::removeIf。我认为我不能简单地将它放在没有任何先决条件的情况下。 如此:实现基本是散装 remove,不像ArrayList::remove。一个例子应该使事情更容易理解。假设我有以下列表: List<Integer> list = new ArrayList<>(); // 2, 4, 6, 5, 5 list.add(2); list.add(4); list.add(6); list.add(5); list.add(5); 我想删除所有偶数元素。我可以做: Iterator<Integer> iter = list.iterator(); while (iter.hasNext()) { int elem = iter.next(); if (elem % 2 == 0) { iter.remove(); } } 或: list.removeIf(x -> x % 2 == 0); 结果将是相同的,但是实现是非常不同的。由于iterator是的视图,因此ArrayList每次调用时remove,ArrayList都必须将基础层置于“良好”状态,这意味着内部数组实际上会发生变化。同样,每次调用时remove,都会在System::arrayCopy内部进行调用。 …
9 java  java-8  iterator 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.