gpt4 book ai didi

c++ - 自定义输入迭代器

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:48 25 4
gpt4 key购买 nike

我有一个自定义的只读数据结构,我需要横向移动。我想创建一个需要跳过某些值的自定义迭代器。

一个简单但等效的例子如下。我有一个数字 vector ,我想遍历所有跳过的负值。通常我会做类似的事情:

vector<int> v;
for (vector<int>::iterator it = v.begin(); it!=v.end(); ++it) {
if (*it > 0) {
dosomething(*it);
}
}

但是我想做这样的事情:

vector<int> v;
for (vector<int>::my_iterator it = v.my_begin(); it!=v.my_end(); ++it) {
dosomething(*it);
}

实现这一目标的正确方法是什么?

最佳答案

这很容易通过 boost::filter_iterator 实现,如果您的数据结构已经在引擎盖下存储了一个容器。这是一个简单的例子:

#include <vector>
#include <iostream>
#include <boost/iterator/filter_iterator.hpp>

class X{
typedef std::vector<int> container;
struct Pred{
bool operator()(int i){
return i % 2 == 0;
}
};

public:
typedef boost::filter_iterator<Pred, container::iterator> iterator;

void add(int val){ nums.push_back(val); }
iterator begin(){ return iterator(nums.begin(), nums.end()); }
iterator end(){ return iterator(nums.end(), nums.end()); }

private:
container nums;
};

int main(){
X x;
for(int i=0; i < 10; ++i)
x.add(i);
for(X::iterator it = x.begin(), ite = x.end(); it != ite; ++it)
std::cout << *it << ' ';
}

Live example at Ideone.输出:

0 2 4 6 8

关于c++ - 自定义输入迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9048578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com