标签: iterator

使用boost :: iterator_facade有什么优缺点?

是的 - 标题几乎总结了它.我有很多实现迭代器概念的类型,我想知道是否值得引入这个boost头而不是手动实现.

至今:

好处

  • 明确指出
  • 不太可能有bug

c++ boost iterator

8
推荐指数
1
解决办法
2054
查看次数

使用s:iterator迭代地图列表

我正在尝试使用s:iterator迭代一个地图列表.我可以毫无问题地遍历List,但是我不能让它迭代遍历地图的条目.到目前为止,我有这个:

[..]
<s:iterator value="records" status="recordsStatus" var="record">
        <s:if test="#recordsStatus.index ==0">
            <tr>
                <td colspan="*"></td>
            </tr>
        </s:if>
        <tr>
            <s:iterator value="record.entrySet()" status="fieldStatus">
            <td>
                <s:property value="key"/>/<s:property value="value"/>
            </td>
            </s:iterator>
        </tr>
    </s:iterator>
[..]
Run Code Online (Sandbox Code Playgroud)

标签生成

<tr></tr>
Run Code Online (Sandbox Code Playgroud)

对于每个条目,但它不会通过第二个迭代器,所以我想我在使用value属性做错了.你能帮帮我吗?

谢谢

何塞

iterator struts2 map

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

尝试在C++中使用带迭代器和函数的for_each时,"未解析的重载函数类型"

//for( unsigned int i=0; i < c.size(); i++ ) tolower( c[i] );
for_each( c.begin(), c.end(), tolower );
Run Code Online (Sandbox Code Playgroud)

我试图使用for_each循环代替for循环进行赋值.

我不确定为什么我收到此错误消息:

In function âvoid clean_entry(const std::string&, std::string&)â:
prog4.cc:62:40: error: no matching function for call to âfor_each(std::basic_string<char>::iterator, std::basic_string<char>::iterator, <unresolved   overloaded function type>)â
Run Code Online (Sandbox Code Playgroud)

c++ iterator g++

8
推荐指数
1
解决办法
7572
查看次数

如何实现类似std的迭代器的自定义实现?

我写了一个非常简单的文件管理数据库,基本上看起来像这样:

class FileDB
{
public:
    FileDB(std::string dir) : rootDir(dir) { }

    void loadFile(std::string filename, File &file) const;
    void saveFile(std::string filename, const File &file) const;

private:
    std::string rootDir;
}
Run Code Online (Sandbox Code Playgroud)

现在我想迭代遍历数据库中包含的所有文件,例如使用std::iterator:

void iterateFiles()
{
    FileDB filedb("C:\\MyFiles");

    for (FileDB::iterator file_it = filedb.begin(); file_it != filedb.end(); ++file_it)
    {
        File f = *file_it;
        // do something with file
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了类似问题的答案,有些人建议推导std::iterator,有些人要使用std::iterator_traits,但我真的不明白该怎么做.尝试实现自定义迭代器时可能出现什么问题?什么是简单而优雅的方式呢?

编辑: 请不要考虑使用提升,我的问题更具概念性.

编辑2:

FileDB的工作方式如下:

  • ROOTDIR

    • foo1
      • BAR1
        • foo1bar1_1.txt
        • foo1bar1_2.txt
      • BAR2
        • foo1bar2_1.txt
        • foo1bar2_2.txt
    • foo2的

      • barM中

        • fooNBarM_x.txt

所以基本上,我可以通过它的名字找到一个文件.

由于我的容器不在内存中,因此我没有指向其数据的指针.所以我的想法是将文件的路径存储在迭代器中.这样,我可以 …

c++ iterator std

8
推荐指数
2
解决办法
5873
查看次数

Python等效于LINQ

在C#中,使用LINQ,如果我有en枚举enumerable,我可以这样做:

// a: Does the enumerable contain an item that satisfies the lambda?
bool contains = enumerable.Any(lambda);

// b: How many items satisfy the lambda?
int count = enumerable.Count(lambda);

// c: Return an enumerable that contains only distinct elements according to my custom comparer
var distinct = enumerable.Distinct(comparer);

// d: Return the first element that satisfies the lambda, or throws an exception if none
var element = enumerable.First(lambda);

// e: Returns an enumerable containing all the elements except …
Run Code Online (Sandbox Code Playgroud)

python iterator functional-programming

8
推荐指数
3
解决办法
4597
查看次数

如何为属性的集合属性编写自己的迭代器(使用正确的类型转换)?

我有一个带有一些对象组合的模型类,我不知道为此编写迭代器的最佳方法.要更详细地查看问题,这里是层次结构(半伪代码):

Root类:

MYEntity : NSObject
@property int commonProperty;
@property NSArray *childs; //Childs of any kind.
Run Code Online (Sandbox Code Playgroud)

一些具体的子类:

MYConcreteStuff : MYEntity
@property int number;

MYConcreteThing : MYEntity
@property NSString *string;
Run Code Online (Sandbox Code Playgroud)

并且具有具体集合的根对象:

MYRoot : MYEntity
@property MYEntity *stuff; //Collect only stuff childs here.
@property MYEntity *things; //Collect only thing childs here.
Run Code Online (Sandbox Code Playgroud)

现在我可以为集合编写很酷的成员访问器(在MYEntity中),如:

-(MYEntity*)entityForIndex:(int) index
{
    if ([self.childs count] > index)
        return [self.childs objectAtIndex:index];

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

对于根对象,甚至更酷,良好类型的成员成员访问器.

-(MYConcreteThing*)thingForIndex:(int) index
{
    if ([self.things count] > index)
        return (MYConcreteThing*)[self.things entityForIndex];

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

但是我不知道如何为这样的集合编写一些oneliner迭代器.想要的客户端代码如下:

for …
Run Code Online (Sandbox Code Playgroud)

collections iterator casting objective-c ios

8
推荐指数
1
解决办法
2622
查看次数

输入流上基于范围的循环

要迭代输入流,我们通常会使用std::istream_iterator如下:

typedef std::istream_iterator<std::string> input_iterator;

std::ifstream file("myfile");
for (input_iterator i(file); i != input_iterator(); i++) {
  // Here, *i denotes each element extracted from the file
}
Run Code Online (Sandbox Code Playgroud)

如果我们可以使用基于范围的for语句来迭代输入流,那就太好了.但是,对于类的对象,范围为基础的for需要的对象具有begin()end()成员函数(§6.5.4,粗体强调):

  • 如果_RangeT是一个数组类型,开始-EXPR最终EXPR__range__range + __bound分别,其中__bound在阵列的约束.如果_RangeT是未知大小的数组或不完整类型的数组,则该程序格式不正确;

  • 如果_RangeT是一个类型时,不合格的IDS begin并且end在类的范围查找_RangeT仿佛由类成员访问查找(3.4.5),并且如果任一个(或两者)找到至少一个声明,开始-EXPR端-expr分别是__range.begin()__range.end();

  • 否则,开始-EXPR最终EXPRbegin(__range)end(__range) …

c++ iterator inputstream c++11

8
推荐指数
2
解决办法
2898
查看次数

如何迭代几个范围或迭代器的产品?

在Rust中有一种自然的方法来迭代几个范围或迭代器的"产品"吗?

当您在多维数组或某些状态空间上进行迭代时,会出现这种情况.例如,我想考虑具有5个元素的布尔元组的所有可能值.嵌套5个for循环有点笨拙.

iterator tuples rust

8
推荐指数
2
解决办法
1624
查看次数

将选项或结果的向量转换为仅成功值时,如何避免解包?

我有一个Vec<Result<T, E>>,我想忽略所有的Err值,将其转换为Vec<T>.我可以做这个:

vec.into_iter().filter(|e| e.is_ok()).map(|e| e.unwrap()).collect()
Run Code Online (Sandbox Code Playgroud)

这是安全的,但我想避免使用unwrap.有没有更好的方法来写这个?

iterator rust

8
推荐指数
1
解决办法
2383
查看次数

如何检查切片是否已排序?

如何检查切片是否已排序?

假设一个接受切片的函数i32,是否有一种惯用的Rust检查切片是否已排序的方法?

fn is_sorted(data: &[i32]) -> bool {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

是否有可能推广上述方法以便接受迭代器?

fn is_sorted<I>(iter: I)
where 
    I: Iterator, 
    I::Item: Ord,
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

sorting iterator slice rust

8
推荐指数
2
解决办法
431
查看次数