因为我个人会使用this https://stackoverflow.com/a/30782359/1463922 or this https://stackoverflow.com/a/30782265/1463922答案(两者都+1),只是为了增加您的知识 - 您可以使用升压适配器。对于您的情况 -sliced http://www.boost.org/doc/libs/1_58_0/libs/range/doc/html/range/reference/adaptors/reference/sliced.html似乎最合适:
#include <boost/range/adaptor/sliced.hpp>
#include <vector>
#include <iostream>
int main(int argc, const char* argv[])
{
std::vector<int> input={1,2,3,4,5,6,7,8,9};
const int N = 4;
using boost::adaptors::sliced;
for (auto&& e: input | sliced(0, N))
std::cout << e << std::endl;
}
一个重要的注意事项:N 是必需的sliced
不大于distance(range)
- 所以更安全(且更慢)的版本如下:
for (auto&& e: input | sliced(0, std::min(N, input.size())))
所以 - 再次 - 我会使用更简单的、旧的 C/C++ 方法(你想在你的问题中避免这种方法;)