我想知道是否有一种很好的方法可以使用标准库中基于循环和/或算法的范围对容器中的最多N个元素进行迭代(这就是重点,我知道我可以只使用“旧“for有条件的循环)。
基本上,我正在寻找与此Python代码相对应的内容:
for i in arr[:N]:
print(i)
最佳答案
正如我个人会使用this或this答案(两者均为+1)一样,只是为了增加您的知识-您可以使用Boost适配器。对于您的情况-sliced似乎最合适:
#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;
}
重要说明:
sliced
要求N不大于distance(range)
-因此,更安全(更慢)的版本如下: for (auto&& e: input | sliced(0, std::min(N, input.size())))
再次,我将使用更简单的旧C/C++方法(您想在问题中避免这种情况;)