链接C++的迭代器

yni*_*ous 26 c++ iterator

Python的itertools实现了一个迭代器,它基本上连接了许多不同的迭代器,以提供单个迭代器的所有东西.

C++中有类似的东西吗?快速浏览一下boost库并没有发现类似的东西,这对我来说非常令人惊讶.难以实现此功能吗?

ova*_*nes 21

在调查类似问题时遇到了这个问题.

即使问题很老,现在在C++ 11和boost 1.54的时候,使用Boost.Range库也很容易.它具有一个join功能,可以将两个范围连接成一个.在这里,您可能会产生性能损失,因为最低公共范围概念(即单通道范围或正向范围等)用作新范围的类别,并且在迭代期间可以检查迭代器是否需要跳转到新范围,但您的代码可以很容易地编写如下:

#include <boost/range/join.hpp>

#include <iostream>
#include <vector>
#include <deque>

int main()
{
  std::deque<int> deq = {0,1,2,3,4};  
  std::vector<int> vec = {5,6,7,8,9};  

  for(auto i : boost::join(deq,vec))
    std::cout << "i is: " << i << std::endl;

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

  • 这可能没有提升吗? (10认同)
  • range 库将成为 C++20 的一部分 (2认同)