C++ Find Certain Element in Queue -
the idea simple , task needs queue, please dont suggest other methods.
i need have full queue, example 5 elements of (5,4,3,2,1) , user has enter position of element want moved front. e.g, position 3, element 2. new queue be: 2,5,4,3,1...
i have been working on long time isnt hit wall ask help. nudge me working in right direction again :) thanks
queue representations pretty arbitrary. i'd use deque:
#include <deque> #include <algorithm> #include <iostream> int main() { std::deque<int> queue { 5, 4, 3, 2, 1 }; auto b = begin(queue); std::cout << "which element? "; int n; if (std::cin >> n && n > 0 && size_t(n) <= queue.size()) { std::rotate(b, b+n-1, b+n); (auto : queue) std::cout << << " "; } else { std::cout << "invalid input\n"; } }
see live on coliru
if queue mean lifo-access only, it'd become:
#include <queue> #include <algorithm> #include <iostream> int main() { std::queue<int> queue, stash; (int i=1; i<=5; ++i) queue.push(i); std::cout << "which element? "; int n; if (std::cin >> n && n > 0 && size_t(n) <= queue.size()) { while (--n) stash.push(queue.front()), queue.pop(); if (!stash.empty()) { int select = stash.front(); stash.pop(); while (!stash.empty()) queue.push(stash.front()), stash.pop(); queue.push(select); } while (!queue.empty()) { std::cout << queue.front() << " "; queue.pop(); } } else { std::cout << "invalid input\n"; } }
see live on coliru too
Comments
Post a Comment