标签: iteration

通用迭代器

我试图找到一种访问一组容器的通用方法.除了另一个自定义列表外,我还有一个标准的矢量和列表.

自定义列表定义了一个迭代器;

class Iterator: public std::iterator<std::forward_iterator_tag, T> {
    // ...
}

Iterator begin() {
    return (Iterator(root));
}

Iterator end() {
    return (Iterator(NULL));
}
Run Code Online (Sandbox Code Playgroud)

与适当的运算符重载.

理想情况下,我想这样做;

class Foo {
public:
    Foo() {
        std::list<int> x;
        std::vector<int> y;
        custom_list<int> z;

        iter = x.begin(); // OR
        iter = y.begin(); // OR
        iter = z.begin();

        // ...
    };
private:
    std::iterator<int> iter;
};
Run Code Online (Sandbox Code Playgroud)

但显然这些都是不同类型的迭代器.我可以假设所有容器都是相同类型的.

有没有一种优雅的方法来解决这个问题?

c++ generics iteration containers

29
推荐指数
1
解决办法
1万
查看次数

递归或迭代?

我喜欢递归.我认为它简化了很多事情.另一个可能不同意; 我认为这也使代码更容易阅读.但是,我注意到递归在C#等语言中并没有像在LISP中那样被使用(顺便提一下,这是我最喜欢的语言).

有没有人知道是否有任何好的理由不使用C#等语言的递归?它比迭代更昂贵吗?

language-agnostic iteration optimization recursion

29
推荐指数
6
解决办法
1万
查看次数

jQuery对象的递归迭代

前几天我以为我在jQuery中看到了一个对象迭代器,它有一个可以设置为递归迭代子对象的标志.我认为它是jQuery.each()的一部分,但现在我没有在文档中看到这种功能.

在jQuery中是否有任何可以自动递归的迭代器?

(我知道如何在javascript中执行此操作.只是想知道我是否真的看到了我以为我看到的内容.)

非常感谢!

编辑:要清楚,我正在考虑像jQuery.each()这样的实用程序方法,它将在javascript对象及其嵌套对象上递归迭代.

给定下面的示例,each()方法将遍历所有对象,包括myobj.obj2.key2中的嵌套对象.

我本可以发誓我在jQuery文档中看到了一些关于它的东西,但现在我找不到了.

谢谢.

var myobj = {
    obj1: {key1:'val1', key2:'val2'},
    obj2: {key1:'val1', key2: {nest1:'val1', nest2:'val2', nest3:'val3'}},
    obj3: {key1:'val1', key2:'val2'}
}

$jQuery.each(myobj, function(key,val) {
    // Code to run over each key/val pair
    // Does so recursively to include all nested objects
})
Run Code Online (Sandbox Code Playgroud)

iteration recursion jquery json object

29
推荐指数
2
解决办法
4万
查看次数

达到最大长度值后,将下一个输入聚焦

一旦前一个输入达到最大长度值,如何关注下一个输入?

a: <input type="text" maxlength="5" />
b: <input type="text" maxlength="5" />
c: <input type="text" maxlength="5" />
Run Code Online (Sandbox Code Playgroud)

如果用户粘贴的文本大于maxlength,理想情况下它应该溢出到下一个输入中.

jsFiddle: http ://jsfiddle.net/4m5fg/1/

我必须强调,我希望使用的插件,因为我宁愿学习背后的逻辑,不是使用已经存在的东西.感谢您的理解.

javascript iteration jquery counter

29
推荐指数
4
解决办法
6万
查看次数

在迭代期间修改列表和字典,为什么它在dict上失败?

让我们考虑这个迭代列表的代码,同时每次迭代删除一个项目:

x = list(range(5))

for i in x:
    print(i)
    x.pop()
Run Code Online (Sandbox Code Playgroud)

它会打印出来0, 1, 2.由于前两次迭代删除了列表中的最后两个元素,因此仅打印前三个元素.

但是如果你在dict上尝试类似的东西:

y = {i: i for i in range(5)}

for i in y:
    print(i)
    y.pop(i)
Run Code Online (Sandbox Code Playgroud)

它将打印0,然后提升RuntimeError: dictionary changed size during iteration,因为我们正在迭代它时从字典中删除一个键.

当然,在迭代期间修改列表是不好的.但是为什么RuntimeError不像字典那样提出?这种行为有什么好的理由吗?

python iteration dictionary loops list

29
推荐指数
2
解决办法
1441
查看次数

在Java中迭代数组的最快方法:循环变量vs增强语句

在Java中,以老式的方式迭代数组是否更快,

for (int i = 0; i < a.length; i++)
    f(a[i]);
Run Code Online (Sandbox Code Playgroud)

或者使用更简洁的表格,

for (Foo foo : a)
    f(foo);
Run Code Online (Sandbox Code Playgroud)

对于ArrayList,答案是否相同?

当然,对于大量的应用程序代码,答案是它没有明显的区别,因此应该使用更简洁的表单来提高可读性.然而,我正在研究的背景是重型技术计算,必须执行数十亿次操作,因此即使很小的速度差异也可能最终显着.

java iteration performance

28
推荐指数
3
解决办法
7万
查看次数

在python中是否有没有结果的地图?

有时候,我只想为一个条目列表执行一个函数 - 例如:

for x in wowList:
   installWow(x, 'installed by me')
Run Code Online (Sandbox Code Playgroud)

有时我需要这些东西用于模块初始化,所以我不希望在全局命名空间中有像x这样的足迹.一种解决方案是将map与lambda一起使用:

map(lambda x: installWow(x, 'installed by me'), wowList)
Run Code Online (Sandbox Code Playgroud)

但这当然会创建一个很好的列表[无,无,...]所以我的问题是,如果有一个没有返回列表的类似函数 - 因为我只是不需要它.

(当然我也可以使用_x,因此不会留下可见的足迹 - 但地图解决方案看起来很整洁......)

python iteration

27
推荐指数
5
解决办法
1万
查看次数

在Android中的RadioGroup中获取RadioButton数组

有没有办法RadioButton在Android 中获取s 的数组(或集合)RadioGroup?我想将单个侦听器添加到单选按钮,但我没有看到任何明显的迭代方法.

arrays iteration android radio-group radio-button

27
推荐指数
1
解决办法
2万
查看次数

从交替的边循环列表

给出一个清单

a = [0,1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到

b = [0,9,1,8,2,7,3,6,4,5]
Run Code Online (Sandbox Code Playgroud)

也就是说,产生一个新的列表,其中每个连续的元素交替地从原始列表的两边取出?

python iteration algorithm list

27
推荐指数
7
解决办法
2128
查看次数

在C++中是否可以使用命名变量(例如,键和值)而不是.first和.second来执行std :: map <>"for element:container"迭代?

我不知道该搜索什么.我发现重命名地图迭代器的第一个和第二个,但它不是我想要做的.

这是我想要做的[见下面的无意义的C++代码].有可能接近这个吗?否则将只需要选择"调整"迭代器作为循环内部的第一行我想.

// what I want to do:
std::map<int, std::string> my_map;
// ... populate my_map
for(auto key, auto & value: my_map){
    // do something with integer key and string value
}
Run Code Online (Sandbox Code Playgroud)

C++ 11很好,但如果可能,请避免使用.

我得到的最接近的是

// TODO, can this be templated?
struct KeyVal{
    int & id;
    std::string & info;

    template <typename P>
    KeyVal(P & p)
        : id(p.first)
        , info(p.second)
    {
    }
};

//...
for ( KeyVal kv : my_map ){
    std::cout << kv.info;
}
Run Code Online (Sandbox Code Playgroud)

但这意味着为每个地图编写一个适配器类:(

// slightly joke answer/"what …
Run Code Online (Sandbox Code Playgroud)

c++ iteration dictionary readability c++11

26
推荐指数
3
解决办法
2725
查看次数