标签: iterator

在Java中显示列表与Python中一样优雅

在Python中,将逗号显示为以逗号分隔的列表非常容易:

>>> iterable = ["a", "b", "c"]
>>> ", ".join(iterable)
'a, b, c'
Run Code Online (Sandbox Code Playgroud)

是否有一种接近这种简洁的Java方式?(注意最后没有",".)

python java iterator join list

7
推荐指数
2
解决办法
2421
查看次数

如何打破这个循环typedef?

我要声明几个类型的(内部的类的模板上K,并V和提供了一些缓存行为):

typedef std::map<
  long long,
  typename key_to_value_type::iterator  // Ooops... not declared yet
> timestamp_to_key_type;

typedef std::map<
  K,
  std::pair<V,typename timestamp_to_key_type::iterator> 
> key_to_value_type;
Run Code Online (Sandbox Code Playgroud)

当然,由于循环定义,这是不可能的.我可以用它来破解它void*,但我想知道是否有一些前向声明魔法或其他技术可以更好地完成工作.

(是的,我知道boost::bimap有人会回避这个问题).

c++ iterator stl typedef forward-declaration

7
推荐指数
1
解决办法
416
查看次数

Python实现在STL next_permutation

next_permutation是一个C++函数,它按字典顺序给出字符串的下一个排列.有关其实现的详细信息可以从这个非常棒的帖子中获得.http://wordaligned.org/articles/next-permutation

  1. 有人知道Python中的类似实现吗?
  2. STL迭代器是否有直接的python等价物?

c++ python iterator stl

7
推荐指数
2
解决办法
5190
查看次数

使用具有代码访问安全性的C#迭代器方法的问题

我有一个简单的方法,使用迭代器块返回IEnumerable<T>:

IEnumerable<MyItem> GetItems()
{
    foreach (var item in Items)
    {
        yield return item;
    }
}
Run Code Online (Sandbox Code Playgroud)

通常,此方法工作正常,但如果我将一个[SecurityCritical]属性应用于程序集(或包含上述方法的类),它会TypeLoadException在尝试调用该方法时抛出一个.无法加载的类型是编译器生成的类,它对应于迭代器方法,它GetEnumerator是导致问题的方法,因为它是安全透明的.

为了比较,如果我修改上面的方法,使其填充并返回a List<MyItem>,一切正常.

有什么建议?

谢谢,

蒂姆.

c# iterator typeloadexception code-access-security yield-return

7
推荐指数
1
解决办法
316
查看次数

如何获取常规文件类型的文件扩展名列表?

我试图使用mimetypes模块基于MIME类型的第一部分获取文件扩展名列表.例如.'image'是'image/jpeg','image/png'等的第一部分.

这是我的代码:

import mimetypes

def get_extensions_for_type(general_type):
    for ext in mimetypes.types_map:
        if mimetypes.types_map[ext].split('/')[0] == general_type:
            yield ext

VIDEO = tuple(get_extensions_for_type('video'))
AUDIO = tuple(get_extensions_for_type('audio'))
IMAGE = tuple(get_extensions_for_type('image'))

print("VIDEO = " + str(VIDEO))
print('')
print("AUDIO = " + str(AUDIO))
print('')
print("IMAGE = " + str(IMAGE))
Run Code Online (Sandbox Code Playgroud)

这是输出:

VIDEO = ('.m1v', '.mpeg', '.mov', '.qt', '.mpa', '.mpg', '.mpe', '.avi', '.movie', '.mp4')

AUDIO = ('.ra', '.aif', '.aiff', '.aifc', '.wav', '.au', '.snd', '.mp3', '.mp2')

IMAGE = ('.ras', '.xwd', '.bmp', '.jpe', '.jpg', '.jpeg', '.xpm', '.ief', '.pbm', '.tif', '.gif', '.ppm', …
Run Code Online (Sandbox Code Playgroud)

python iterator mime-types

7
推荐指数
1
解决办法
2124
查看次数

迭代器的继任者

我想用另一个迭代器(同类)的后继者初始化一个迭代器(任意类型).以下代码适用于随机访问迭代器,但它使用正向或双向迭代器失败:

Iterator i = j + 1;
Run Code Online (Sandbox Code Playgroud)

一个简单的解决方法是:

Iterator i = j;
++i;
Run Code Online (Sandbox Code Playgroud)

但这并不适用于for循环的初始化.我可以使用如下的函数模板:

template <typename Iterator>
Iterator succ(Iterator it)
{
    return ++it;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

Iterator i = succ(j);
Run Code Online (Sandbox Code Playgroud)

在STL或Boost中有类似的东西,还是有更好的解决方案我不知道?

c++ boost iterator stl

7
推荐指数
1
解决办法
690
查看次数

C++ STL,常量迭代器,find()

我目前正在学习STL,我对find和const迭代器有一些不确定性.假设我有一个find函数:

some_stl_container::const_iterator found = myContainer.find(value);
Run Code Online (Sandbox Code Playgroud)

在那之后,我应该检查我得到的found另一个const_iterator,或者只是对一个迭代器进行检查是有效的.基本上这样做会有任何区别:

if(found!=myContainer.cend())
Run Code Online (Sandbox Code Playgroud)

还有这个:

if(found!=myContainer.end())
Run Code Online (Sandbox Code Playgroud)

第一个看起来更准确(至少对我而言),但第二个应该也能正常工作,对吗?

c++ iterator stl constants find

7
推荐指数
1
解决办法
1756
查看次数

使用Keras model.fit_generator生成器

我最初尝试generator在编写用于训练Keras模型的自定义生成器时使用语法.所以我yield编辑__next__.但是,当我尝试训练我的模式时,model.fit_generator我会得到一个错误,我的生成器不是迭代器.的修复是改变yieldreturn其中还必要rejiggering的逻辑__next__以跟踪状态.与让yield我为我工作相比,这相当麻烦.

有没有办法可以让这个工作yield?如果我必须使用return语句,我将需要编写几个迭代器,这些迭代器必须具有非常笨重的逻辑.

iterator generator python-3.x keras

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

std :: set iterator具有相同的键和不同的比较器

在试图解决一个问题,我开始思考这个-给予user-defined class和2 comparators吧,让我们说我们有2套std::set<user_class,comparator_inc>,并std::set<user_class,comparator_dec>comparators排序上的一个值增减值user_class(一个简单的int也许).这是我的代码:

#include <iostream>
#include <set>

using std::cout;
using std::endl;
using std::set;

struct A
{
    int val;
};
struct c_inc
{
    bool operator()(const A& first,const A& second) const
    {
        return first.val > second.val;
    }
};
struct c_dec
{
    bool operator()(const A& first,const A& second) const
    {
        return first.val < second.val;
    }
};

int main()
{
    set<A,c_inc> s1;
    set<A,c_dec> s2;

    auto x = s1.insert({1});
    cout << x.first->val …
Run Code Online (Sandbox Code Playgroud)

c++ iterator set language-lawyer c++11

7
推荐指数
1
解决办法
246
查看次数

为什么 std::next/prev 不像 std::advance 那样按距离模板化?

出于好奇,对 的std::advance()距离类型使用模板参数的基本原理是什么,但difference_type对距离 instd::next()和使用迭代器的基本原理是什么std::prev()

为什么不使用相同的方法(任一方法)?

跟进:

默认的存在n = 1似乎并没有阻止next被模板化,Distance正如下面答案中所建议的那样。这编译:

#include <iterator>
#include <set>

template<typename InputIt,
    typename Distance = typename std::iterator_traits<InputIt>::difference_type>
InputIt my_next(InputIt it, Distance n = 1)
{
    std::advance(it, n);
    return it;
}

int main()
{
    std::set<int> s;
    my_next(s.begin());
    my_next(s.begin(), 10ul);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ iterator c++11

7
推荐指数
1
解决办法
129
查看次数