From 362ef757b38787b17a15126e54b7e0bad6d2d92b Mon Sep 17 00:00:00 2001 From: studiosi Date: Sun, 16 Aug 2026 09:02:44 +0300 Subject: [PATCH] Solved: 25 - Container Adapters --- .../src/container_adapters.cpp | 47 ++++++++++++++++--- .../test/container_adapters_test.cpp | 1 + 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/modules/07_stl_containers/src/container_adapters.cpp b/modules/07_stl_containers/src/container_adapters.cpp index a261174..0771953 100644 --- a/modules/07_stl_containers/src/container_adapters.cpp +++ b/modules/07_stl_containers/src/container_adapters.cpp @@ -1,20 +1,55 @@ #include "container_adapters.hpp" +#include +#include +#include + namespace stl_containers { auto is_balanced_parentheses(const std::string& text) -> bool { - (void)text; + std::stack s; + for (const auto c: text) { + switch (c) { + case '(': + s.push(')'); + break; + case '[': + s.push(']'); + break; + case '{': + s.push('}'); + break; + case ')': + case ']': + case '}': { + if (const auto n = s.top(); c != n) return false; + s.pop(); + break; + } + default: + return false; + } + } + if (s.empty()) return true; return false; } auto simulate_queue(const std::vector& arrivals) -> std::vector { - (void)arrivals; - return {}; + auto v = std::vector{}; + const auto push = [&v](const int val){v.push_back(val);}; + std::ranges::for_each(arrivals, push); + return v; } -auto top_k_largest(const std::vector& data, int k) -> std::vector { - (void)data; (void)k; - return {}; +auto top_k_largest(const std::vector& data, const int k) -> std::vector {; + auto v = std::vector{}; + std::ranges::for_each(data, [&v](const auto& p){v.push_back(p);}); + // Remove duplicates + std::set s{v.begin(), v.end()}; + v = std::vector{s.begin(), s.end()}; + std::ranges::sort(v, std::ranges::greater{}); + v.resize(k); + return v; } } // namespace stl_containers diff --git a/modules/07_stl_containers/test/container_adapters_test.cpp b/modules/07_stl_containers/test/container_adapters_test.cpp index 31418e1..637b747 100644 --- a/modules/07_stl_containers/test/container_adapters_test.cpp +++ b/modules/07_stl_containers/test/container_adapters_test.cpp @@ -12,4 +12,5 @@ TEST(ContainerAdapters, SimulateQueue) { TEST(ContainerAdapters, TopKLargest) { EXPECT_EQ(stl_containers::top_k_largest({3, 1, 4, 1, 5}, 3), (std::vector{5, 4, 3})); + EXPECT_EQ(stl_containers::top_k_largest({3, 1, 4, 1, 5, 5, 5}, 3), (std::vector{5, 4, 3})); }