2015-04-01 2 views
0

В Python, если у меня есть список L и мне нужны первые x его элементов, я называю L [: x].Что такое эквивалент списка Python [: x] в C++?

В C++ вместо этого я использую векторы, но я не знаю простого способа вызвать первые x элементов вектора.

+0

Вы можете сделать это с помощью [ 'станд :: list'] (Http: // ан .cppreference.com/w/cpp/container/list), используя функцию ['сращивание'] (http://en.cppreference.com/w/cpp/container/list/splice). –

ответ

3

Есть несколько способов:

1) Создание вектора v, состоящий из первых x элементов, как:

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

2) Пройти первые x элементы к функции, как пары итераторов:

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

, где f принимает два итератора в качестве аргументов — standard algorithms от <algorithm>, так как почти все они работают на пару итераторов.

В зависимости от вашего варианта использования вы можете использовать любой из них.

0

Если вы хотите использовать 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, 
Смежные вопросы