2024-05-15 02:15:08 发布
网友
Python提供了组合和构建迭代器的有趣方法(请参见itertools)。我对repeat、cycle和chain的功能特别感兴趣。其他迭代器也很有趣
repeat
cycle
chain
这些迭代器是用C++或Boost实现的吗?我找到了Boost的adaptors,但我认为不可能实现迭代器repeat、cycle和chain
我当然可以为这些(以及itertools中的其他迭代器)编写自己的迭代器类,但我想检查一下这个轮子是否还没有发明出来
itertools
你可以在C++中实现它。下面是一个例子:
#include <iostream> #include <vector> template <typename It, typename T = typename It::value_type> class cycle_iterator { public: typedef cycle_iterator self_type; typedef T value_type; typedef T& reference; typedef T* pointer; typedef std::forward_iterator_tag iterator_category; typedef int difference_type; cycle_iterator(It begin, It end) : m_current(begin), m_begin(begin), m_end(end) { } self_type operator++() { advance(); return *this; } self_type operator++(int) { self_type i = *this; advance(); return i; } reference operator*() { return *m_current; } pointer operator->() { return &*m_current; } bool operator==(const self_type& rhs) { return m_current == rhs.m_current; } bool operator!=(const self_type& rhs) { return m_current != rhs.m_current; } private: void advance() { ++m_current; if (m_current == m_end) m_current = m_begin; } private: It m_current; It m_begin, m_end; }; int main() { std::vector<int> vec {1, 2, 3, 4}; cycle_iterator<std::vector<int>::iterator> it (vec.begin(), vec.end()); for (int i = 0; i < 10; i++) std::cout << *it++ << " "; std::cout << std::endl; return 0; }
结果输出:
1 2 3 4 1 2 3 4 1 2
小心,这是无止境的
事实上,如果您愿意,您可以实现无止境的变体(如您所愿),这只是一个简单的演示
你可以在C++中实现它。下面是一个例子:
结果输出:
小心,这是无止境的
事实上,如果您愿意,您可以实现无止境的变体(如您所愿),这只是一个简单的演示
相关问题 更多 >
编程相关推荐