在Python中,如果我有一些列表L并且我想要它的前x个元素,我会调用L [:x]。
在C ++中,我使用向量代替,但我不知道有什么简单的方法可以调用向量的前x个元素。
答案 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,