2014-09-03 14 views
5
for (int p : colourPos[i+1]) 

Làm cách nào để bỏ qua lần lặp đầu tiên của véc tơ colourPos?Bỏ qua lần lặp thứ nhất dựa trên phạm vi cho các vòng

Tôi có thể sử dụng .beginend không?

+0

'bool đầu tiên = true; cho (int p: colourPos) {if (first) {first = false; tiếp tục; } // ... code here} ' – NetVipeC

+0

' đầu tiên = 1; 'sau đó' if (first == 1) {first = 0; tiếp tục; } '? –

+1

có thể bạn muốn sử dụng 'std :: for_each' thay vì một dải dựa trên vòng lặp? – YoungJohn

Trả lời

7

Live demo link.

#include <iostream> 
#include <vector> 
#include <iterator> 
#include <cstddef> 

template <typename T> 
struct skip 
{ 
    T& t; 
    std::size_t n; 
    skip(T& v, std::size_t s) : t(v), n(s) {} 
    auto begin() -> decltype(std::begin(t)) 
    { 
     return std::next(std::begin(t), n); 
    } 
    auto end() -> decltype(std::end(t)) 
    { 
     return std::end(t); 
    } 
}; 

int main() 
{ 
    std::vector<int> v{ 1, 2, 3, 4 }; 

    for (auto p : skip<decltype(v)>(v, 1)) 
    { 
     std::cout << p << " "; 
    } 
} 

Output:

2 3 4 

Hoặc đơn giản hơn:

Yet another live demo link.

#include <iostream> 
#include <vector> 

template <typename T> 
struct range_t 
{ 
    T b, e; 
    range_t(T x, T y) : b(x), e(y) {} 
    T begin() 
    { 
     return b; 
    } 
    T end() 
    { 
     return e; 
    } 
}; 

template <typename T> 
range_t<T> range(T b, T e) 
{ 
    return range_t<T>(b, e); 
} 

int main() 
{ 
    std::vector<int> v{ 1, 2, 3, 4 }; 

    for (auto p : range(v.begin()+1, v.end())) 
    { 
     std::cout << p << " "; 
    } 
} 

Output:

2 3 4 
7

Làm điều này:

bool first = true; 

for (int p : colourPos) 
{ 
    if (first) 
    { first = false; continue; } 

    // ... 
} 
Các vấn đề liên quan