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 .begin
và end
không?
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 .begin
và end
không?
#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:
#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
Làm điều này:
bool first = true;
for (int p : colourPos)
{
if (first)
{ first = false; continue; }
// ...
}
'bool đầu tiên = true; cho (int p: colourPos) {if (first) {first = false; tiếp tục; } // ... code here} ' – NetVipeC
' đầu tiên = 1; 'sau đó' if (first == 1) {first = 0; tiếp tục; } '? –
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