获取迭代器范围的每个第 n 个元素
Get each nth element of iterator range
是否有任何迭代器的标准实现(意味着stdlib或boost)包装另一个迭代器并仅提供其每个n个元素?
我最初认为这可以通过合适的谓词和 boost::filter_iterator 来实现,但谓词只获得值而不是基本迭代器,因此它无法分辨到开始的距离。
编辑
要提供更多信息:迭代器应与 std::transform
或 std::copy
等函数兼容。所以它应该像 stdlib 迭代器一样使用。
类似问题:
C++/STL: std::用给定的步伐转换?
使用非随机访问迭代器实现非单元迭代器步幅
Boost.Range 提供了一个步幅适配器。使用 boost::begin
/boost::end
将为您获取关联的迭代器。
您可以将boost::filter_iterator
与谓词一起使用,如下所示:
template< typename T, int N >
struct EveryNth {
bool operator()(const T&) { return m_count++ % N == 0; }
EveryNth() : m_count(0) {}
private:
int m_count;
};
相关文章:
- 对于set上的循环-获取next元素迭代器
- 访问要输出的矢量迭代器元素
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- C++如何乘以包含 std::variant 元素的向量的迭代器?正在执行迭代器类型的转换?
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 为什么 min_element() 返回最小元素的索引,而不是迭代器?
- 如何通过查找迭代器结果分配给一组对的元素
- C++:在进行切片时对迭代器的约定,特别是对于访问最后一个元素并最终将其删除
- 将迭代器作为 3 个元素的滑动窗口,可以超调边界(可能使用 Boost)
- C++链表最后一个元素的迭代器?
- 使用索引与迭代器将向量迭代到倒数第二个元素
- 提升堆元素句柄比较和 MSVC 迭代器调试工具
- 如果我有一个指向矢量元素的指针,而不是迭代器,如何删除它?
- 使用迭代器打印矢量元素
- C++ std::vector语言 - 如何修改迭代器指定的元素?
- 你能pop_back一个向量,并且仍然使用迭代器到最后一个元素吗?
- 优先级队列(使用 pairs<int,int> ) 根据 for 循环迭代器的顶级元素
- C++ 当容器在使用前被破坏/修改时发出警告(通过引用元素或迭代器使用)
- 无法将 std::set 中的元素迭代器插入到 std::list
- 使用std :: remove_reference获取STL容器的元素迭代器