我想知道是否有一种很好的方法可以使用标准库中基于循环和/或算法的范围对容器中的最多N个元素进行迭代(这就是重点,我知道我可以只使用“旧“for有条件的循环)。

基本上,我正在寻找与此Python代码相对应的内容:

for i in arr[:N]:
    print(i)

最佳答案

正如我个人会使用thisthis答案(两者均为+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++方法(您想在问题中避免这种情况;)

09-04 17:06
查看更多