2017-02-13 16 views
1

Если я создать вектор:как напечатать диапазон целых значений от вектора

vector<int> numbers;

и нажать несколько значений в:

for (int i=1; i<=39; ++i) numbers.push_back(i); 

как я могу распечатать только цифры от 1 до 10, например?

Также после этого распечатать 15-30, поэтому numbers.begin(), вероятно, не применим.

ответ

3

Как я могу напечатать только цифры с 1 по 10, например?

std::copy(numbers.begin(), numbers.begin() + 10, std::ostream_iterator(std::cout, " "); 

Кроме того, после того, распечатайте 15-30

std::copy(numbers.begin() + 15, numbers.begin() + 30, std::ostream_iterator(std::cout, " "); 

Если у вас есть доступ к Range-V3 library ... Вы также можете:

for(auto x : numbers | ranges::view::slice(0, 10)) 
    std::cout << x << " "; 

... Сегодня вы можете иметь весь код сужен до:

#include <iostream> 
#include <range/v3/all.hpp> 

int main() { 
    std::vector<int> numbers = ranges::view::closed_iota(1, 40); 

    ranges::copy(numbers | ranges::view::slice(0, 10), ranges::ostream_iterator<int>(std::cout, " ")); 
    std::endl(std::cout); 
    ranges::copy(numbers | ranges::view::slice(15, 30), ranges::ostream_iterator<int>(std::cout, " ")); 
} 

Выходы:

1 2 3 4 5 6 7 8 9 10 
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 

Обратите внимание, что Изменяется-TS на трубопроводе для включения в стандарт на следующий C++. Возможно, C++ 20?

Полный пример Использование Range-V3 Live On Coliru

+0

Это было так очевидно! спасибо, это было блестящее решение. – taeraeyttaejae

+0

Должны быть интересные причины, по которым люди ответят вниз ... :-) – WhiZTiM

+0

да, я действительно не нашел этот ответ из поиска google или stackoverflow ... – taeraeyttaejae