Created
February 26, 2025 21:53
-
-
Save Zaryob/269b99fb7bd021ba1e3e39e2c2b76b41 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <coroutine> | |
struct Generator { | |
struct promise_type { | |
int current_value; | |
Generator get_return_object() { | |
return Generator{std::coroutine_handle<promise_type>::from_promise(*this)}; | |
} | |
std::suspend_always initial_suspend() { return {}; } | |
std::suspend_always final_suspend() noexcept { return {}; } | |
void unhandled_exception() { std::terminate(); } | |
std::suspend_always yield_value(int value) { | |
current_value = value; | |
return {}; | |
} | |
void return_void() {} | |
}; | |
std::coroutine_handle<promise_type> handle; | |
Generator(std::coroutine_handle<promise_type> h) : handle(h) {} | |
~Generator() { if (handle) handle.destroy(); } | |
struct iterator { | |
std::coroutine_handle<promise_type> handle; | |
bool operator!=(std::default_sentinel_t) const { return !handle.done(); } | |
void operator++() { handle.resume(); } | |
int operator*() const { return handle.promise().current_value; } | |
}; | |
iterator begin() { return {handle}; } | |
std::default_sentinel_t end() { return {}; } | |
}; | |
Generator generateSequence(int start, int end) { | |
for (int i = start; i <= end; ++i) { | |
co_yield i; | |
} | |
} | |
int main() { | |
for (int value : generateSequence(1, 5)) { | |
std::cout << value << " "; // Çıktı: 1 2 3 4 5 | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment