标签: 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
查看次数

如何找到Iterable对象的大小?

我正在写一份MR Job.但我遇到了与Iterable对象相关的问题.我需要找到它的大小.我把它浇铸为List对象,但这是错误的.(名单可强制转换为可迭代,但不能做的逆转.)还有另外一种方法,通过使用该对象的迭代和递增每个值的计数器IE浏览器.但这不是最佳解决方案.任何人都可以提出更好的方法吗?

请帮我.提前致谢.

java iterator

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

如何展平嵌套容器的迭代器?

这是詹姆斯对这个问题的答案的一个(另一个)跟进:扁平化迭代器

如何更改flattenig_iterator以使其递归工作?假设我有更多级别的嵌套容器,我不希望被限制在给定的嵌套深度.即flattening_iterator应该使用

std::vector< std::vector < std::vector < int > > >
Run Code Online (Sandbox Code Playgroud)

以及

std::vector< std::vector < std::vector < std::vector < int > > > >
Run Code Online (Sandbox Code Playgroud)

在我的实际代码中,我有一个对象数组,它们本身可能包含或不包含这样的数组.

编辑:

在使用不同方式迭代不同类型的嵌套容器后,我学会了一些其他人可能感兴趣的东西:

使用嵌套循环访问容器元素比使用迭代器解决方案快5到6倍.

优点:

  • 元素可以是复杂的对象,例如(在我的例子中)包含容器的类.
  • 更快的执行

缺点:

  • 每个容器结构都需要一个新的循环实现
  • 标准库算法不可用

其他利弊?

c++ iterator

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

使用C++访问列表列表的元素

我有一个这样的列表列表:

    std::list<std::list<double> > list;
Run Code Online (Sandbox Code Playgroud)

我在其中填充了一些带有双打的列表(实际上非​​常多,这就是为什么我没有使用向量.所有这些复制都需要花费很多时间.)

假设我想访问可以加入的元素,list[3][3]如果列表不是列表而是矢量或二维数组.我该怎么办?

我知道访问列表中的元素是通过使用迭代器完成的.我无法弄清楚如何摆脱双重.

c++ iterator stl doubly-linked-list

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

使用erase和insert替换向量中的元素

void replace(vector<string> my_vector_2, string old, string replacement){

    vector<string>::iterator it;
    for (it = my_vector_2.begin(); it != my_vector_2.end(); ++it){

        if (*it==old){
            my_vector_2.erase(it);
            my_vector_2.insert(it,replacement);

        }
    }

}
Run Code Online (Sandbox Code Playgroud)

所以,我希望这个函数用字符串替换替换向量中所有出现的字符串old.但是在调用此函数时,根本不会更改向量.我不确定我是否正确使用擦除和插入功能.有任何想法吗?

c++ iterator insert vector erase

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

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
查看次数

使用vector <bool>迭代器的任何保证?

cppreferencevector<bool>专门化的迭代器是实现定义的,许多不支持特征ForwardIterator(因此RandomAccessIterator).

cplusplus增加了一个神秘的"最":

容器使用的指针和迭代器类型不一定既不是指针也不是符合迭代器,尽管它们应模拟大多数预期的行为.

我无法访问官方规范.迭代器是否保证了任何迭代器行为vector<bool>

更具体地说,如何编写符合标准的代码以在项目的中间插入项目vector<bool>?以下是我尝试过的几个编译器的工作原理:

std::vector<bool> v(4);
int k = 2;
v.insert(v.begin() + k, true);
Run Code Online (Sandbox Code Playgroud)

会永远吗?

c++ iterator vector

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

是否可以在Rust中实现自定义Iterator :: sum?

我是Rust的新手,我正在努力学习迭代器.我正在研究的具体问题是产生三角形数字的迭代器(三角形数字为1,3,6,10,15,其中1 = 1,3 = 1 + 2,6 = 1 + 2 + 3等).我有这个创建的基础知识,如下所示:

pub struct Triangle {
    cur: u32,
    n: u32,
    m: u32,
}

impl Iterator for Triangle {
    type Item = u32;

    fn next(&mut self) -> Option<u32> {
        if self.n == self.m {
            return None;
        }
        self.n = self.n + 1;
        self.cur = self.cur + self.n;

        Some(self.cur)
    }
}
Run Code Online (Sandbox Code Playgroud)

一个快速可运行的例子是

let t = Triangle { cur: 0, n: 0, m: 10 };
let s: u32 = t.sum();
println!("{}", s); …
Run Code Online (Sandbox Code Playgroud)

iterator rust

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

使用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
查看次数