From ce6f87441ab2343f7730139f20d25b41e9dd6080 Mon Sep 17 00:00:00 2001 From: Oskar Date: Wed, 16 Oct 2024 22:50:50 +0200 Subject: some exercises added here that aren't done, will do later --- 9p31.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 9p31.cpp (limited to '9p31.cpp') diff --git a/9p31.cpp b/9p31.cpp new file mode 100644 index 0000000..38db051 --- /dev/null +++ b/9p31.cpp @@ -0,0 +1,47 @@ +#include +#include +#include + +/* + * + * 9.31 + * + * A lot of comments here but i had to do it to clear it up in my head + */ + +int main () { + + std::list vi = {0,1,2,3,4,5,6,7,8,9}; + auto iter = vi.begin(); // get begin + while (iter != vi.end()) { // when begin is not at the end + if (*iter % 2 == 1) { // when it's odd + iter = vi.insert(iter, *iter); // insert whatever is at *iter before iter and return iterator where the new value was inserted + + ++iter; // advance past what was inserted + ++iter; // advance past the element we checked for odd/even(ness) + } else // when even + iter = vi.erase(iter); // remove the even value, return iterator to element after the erased element + } + + std::forward_list fli = {0,1,2,3,4,5,6,7,8,9}; + auto beg = fli.begin(); // get begin + auto bbeg = fli.before_begin(); // get before begin + while (beg != fli.end()) { // while beg is not at the end + if (*beg % 2 == 1) { // when odd + bbeg = fli.insert_after(bbeg, *beg); // insert *beg after bbeg, returns iterator to inserted element + ++beg; // advance beg to next element to be checked + ++bbeg; // advance bbeg to follow beg one value behind + } else // when it's even + beg = fli.erase_after(bbeg); // erase element after bbeg (the one at beg). Returns iterator to element after erased one (aka next one to be checked) + } + + for(auto &a : vi) { + std::cout << a << std::endl; + } + + for(auto &a : fli) { + std::cout << a << std::endl; + } + + return 0; +} -- cgit v1.2.3