C ++中Python的列表[:x]的等价物是什么?

时间:2015-04-01 15:15:01

标签: python c++ list vector

在Python中,如果我有一些列表L并且我想要它的前x个元素,我会调用L [:x]。

在C ++中,我使用向量代替,但我不知道有什么简单的方法可以调用向量的前x个元素。

2 个答案:

答案 0 :(得分:3)

有几种方法:

1)创建一个由v个元素组成的向量x

 std::vector<T>  v { begin(L), begin(L) + x };

2)将第一个x元素传递给函数,作为迭代器对:

 f(begin(L), begin(L) + x);

其中f接受两个迭代器作为参数 - 从<algorithm>探索standard algorithms,因为几乎所有这些都在迭代器对上工作。

根据您的使用情况,您可以使用其中任何一种。

答案 1 :(得分:0)

如果您愿意使用提升,则提升范围为boost::slice;这与python非常相似:

auto first_x = L | sliced(0, x);

另请参阅其文档页面上的完整示例:

#include <boost/range/adaptor/sliced.hpp>
#include <boost/range/algorithm/copy.hpp>
#include <boost/assign.hpp>
#include <iterator>
#include <iostream>
#include <vector>

int main(int argc, const char* argv[])
{
    using namespace boost::adaptors;
    using namespace boost::assign;

    std::vector<int> input;
    input += 1,2,3,4,5,6,7,8,9;

    boost::copy(
        input | sliced(2, 5),
        std::ostream_iterator<int>(std::cout, ","));

    return 0;
}

// 3,4,5,