From 6571f0eb89435d5c4b5f5de1595ea7bfadb5d7d2 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Tue, 7 Sep 2021 16:54:07 +0300 Subject: [PATCH] 4.2 --- 4.2/iterate_list.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 4.2/iterate_list.cpp diff --git a/4.2/iterate_list.cpp b/4.2/iterate_list.cpp new file mode 100644 index 0000000..6497877 --- /dev/null +++ b/4.2/iterate_list.cpp @@ -0,0 +1,35 @@ +#include +#include + +template +struct Node +{ + T value; + std::unique_ptr> next; +}; + +template +std::size_t countStep(const std::unique_ptr>& node, std::size_t i) +{ + return (node) + ? countStep(node->next, i + 1) + : i; +} + +template +std::size_t count(const std::unique_ptr>& head) +{ + return countStep(head, 0); +} + +int main() +{ + using NodeT = Node; + + auto head = std::make_unique(NodeT{5, nullptr}); + head->next = std::make_unique(NodeT{12, nullptr}); + head->next->next = std::make_unique(NodeT{35, nullptr}); + head->next->next->next = std::make_unique(NodeT{1, nullptr}); + + std::cout << "Size: " << count(head) << '\n'; +}