我需要浏览一个集合并删除符合预定义条件的元素.
这是我写的测试代码:
#include <set>
#include <algorithm>
void printElement(int value) {
    std::cout << value << " ";
}
int main() {
    int initNum[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    std::set<int> numbers(initNum, initNum + 10);
    // print '0 1 2 3 4 5 6 7 8 9'
    std::for_each(numbers.begin(), numbers.end(), printElement);
    std::set<int>::iterator it = numbers.begin();
    // iterate through the set and erase all even numbers
    for (; it != numbers.end(); ++it) {
        int n = *it; …Run Code Online (Sandbox Code Playgroud) Iterator ite = Set.iterator();
Iterator ite = List.iterator();
ListIterator listite = List.listIterator();
Run Code Online (Sandbox Code Playgroud)
我们可以Iterator用来遍历一个Set或一个List或一个Map.但是ListIterator只能用来遍历一个List,它不能遍历一个Set.为什么?
我知道主要区别在于,使用迭代器,我们只能朝一个方向行进,但ListIterator我们可以向两个方向行进.还有其他差异吗?ListIterator超过任何优势Iterator?
考虑:
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Run Code Online (Sandbox Code Playgroud)
因此,正如预期的那样,推进迭代器是通过改变同一个对象来处理的.
在这种情况下,我希望:
a = iter(list(range(10)))
for i in a:
   print(i)
   next(a)
Run Code Online (Sandbox Code Playgroud)
跳过每个第二个元素:调用next应该使迭代器前进一次,然后循环的隐式调用应该再次前进 - 并且第二次调用的结果将被分配给i.
它没有.循环打印列表中的所有项目,而不跳过任何项目.
我的第一个想法是,这可能发生,因为循环调用iter它传递的内容,这可能会给出一个独立的迭代器 - 事实并非像我们所说的那样iter(a) is a.
那么,为什么next在这种情况下似乎没有推进迭代器呢?
在下面的代码中,我遍历一个map并测试是否需要擦除一个元素.擦除元素并继续迭代是否安全,或者我是否需要在另一个容器中收集密钥并执行第二个循环来调用erase()?
map<string, SerialdMsg::SerialFunction_t>::iterator pm_it;
for (pm_it = port_map.begin(); pm_it != port_map.end(); pm_it++)
{
    if (pm_it->second == delete_this_id) {
        port_map.erase(pm_it->first);
    }
}
Run Code Online (Sandbox Code Playgroud)
 从Javascript 1.7开始,有一个Iterator对象,允许这样:
var a={a:1,b:2,c:3};
var it=Iterator(a);
function iterate(){
    try {  
        console.log(it.next());
        setTimeout(iterate,1000);
    }catch (err if err instanceof StopIteration) {  
        console.log("End of record.\n");  
    } catch (err) {  
        console.log("Unknown error: " + err.description + "\n");  
    }  
}
iterate();
Run Code Online (Sandbox Code Playgroud)
在node.js中有这样的东西吗?
现在我正在使用:
function Iterator(o){
    /*var k=[];
    for(var i in o){
        k.push(i);
    }*/
    var k=Object.keys(o);
    return {
        next:function(){
            return k.shift();
        }
    };
}
Run Code Online (Sandbox Code Playgroud)
但是通过存储所有对象键会产生大量开销k.
更多的语法好奇心而不是要解决的问题......
我有两个长度相等的数组,并希望一次迭代它们 - 例如,在某个索引处输出它们的值.
@budget = [ 100, 150, 25, 105 ]
@actual = [ 120, 100, 50, 100 ]
Run Code Online (Sandbox Code Playgroud)
我知道我可以each_index像这样使用和索引数组:
@budget.each_index do |i|
  puts @budget[i]
  puts @actual[i]
end
Run Code Online (Sandbox Code Playgroud)
有没有Ruby方法可以更好地做到这一点?像这样的东西?
# Obviously doesn't achieve what I want it to - but is there something like this?
[@budget, @actual].each do |budget, actual|
  puts budget
  puts actual
end
Run Code Online (Sandbox Code Playgroud) 这两个关于STL内部实现的区别是什么.性能有什么不同?我想当我们在"只读明智"中遍历矢量时,我们更喜欢const_iterator,对吧?
谢谢.
List接口提供了四种对列表元素进行位置(索引)访问的方法.列表(如Java数组)基于零.请注意,对于某些实现(例如,LinkedList类),这些操作可以与索引值成比例地执行.因此,如果调用者不知道实现,则迭代列表中的元素通常优选通过它进行索引.
这到底是什么意思?我不明白得出的结论.
我是C++语言的新手.我已经开始使用向量,并且已经注意到在我看到的所有代码中通过索引迭代通过向量,for循环的第一个参数总是基于向量.在Java中,我可以使用ArrayList执行类似的操作:
for(int i=0; i < vector.size(); i++){
   vector[i].doSomething();
}
Run Code Online (Sandbox Code Playgroud)
有没有理由我在C++中没有看到这个?这是不好的做法吗?
a const_iterator和an 之间的区别是什么iterator?你在哪一个使用另一个?