В Python, если у меня есть список L и мне нужны первые x его элементов, я называю L [: x].Что такое эквивалент списка Python [: x] в C++?
В C++ вместо этого я использую векторы, но я не знаю простого способа вызвать первые x элементов вектора.
В Python, если у меня есть список L и мне нужны первые x его элементов, я называю L [: x].Что такое эквивалент списка Python [: x] в C++?
В C++ вместо этого я использую векторы, но я не знаю простого способа вызвать первые x элементов вектора.
Есть несколько способов:
1) Создание вектора v
, состоящий из первых x
элементов, как:
std::vector<T> v { begin(L), begin(L) + x };
2) Пройти первые x
элементы к функции, как пары итераторов:
f(begin(L), begin(L) + x);
, где f
принимает два итератора в качестве аргументов — standard algorithms от <algorithm>
, так как почти все они работают на пару итераторов.
В зависимости от вашего варианта использования вы можете использовать любой из них.
Если вы хотите использовать boost, то диапазон форсирования имеет 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,
Вы можете сделать это с помощью [ 'станд :: list'] (Http: // ан .cppreference.com/w/cpp/container/list), используя функцию ['сращивание'] (http://en.cppreference.com/w/cpp/container/list/splice). –