diff --git a/chapter_05/examples/CMakeLists.txt b/chapter_05/examples/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..2d5c64a0cd2c6875c949ebb70926a71cb2f066ee --- /dev/null +++ b/chapter_05/examples/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.28) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +project(cxx_course_examples CXX) + + +FILE (GLOB sources ./ *.cc) +foreach(source ${sources}) + get_filename_component(withoutext "${source}" NAME_WE) + add_executable("${withoutext}" "${source}") +endforeach() + + diff --git a/chapter_05/examples/lambda_captures.cc b/chapter_05/examples/lambda_captures.cc new file mode 100644 index 0000000000000000000000000000000000000000..2cb21b4124df8a5199425ca61019fd80e661eed8 --- /dev/null +++ b/chapter_05/examples/lambda_captures.cc @@ -0,0 +1,18 @@ +#include "Vbose.hh" + +auto main() -> int +{ + + std::cout << "Declaring lambda function {\n"; + Vbose locvar{ "dinosaur" }; + auto lambda = [=](int i) { + std::cout << "\nIn lambda function, captured value of locvar is : " + << locvar.getval() << "\n"; + return i * i * i; + }; + std::cout << "Declaring lambda function }\n"; + + std::cout << "Calling lambda function {\n"; + std::cout << 5 << " -> " << lambda(5) << "\n"; + std::cout << "Calling lambda function }\n"; +} diff --git a/chapter_05/examples/mutable_lambdas.cc b/chapter_05/examples/mutable_lambdas.cc new file mode 100644 index 0000000000000000000000000000000000000000..b75719ed46aadcc5b45f5127abff4c80cd9eee69 --- /dev/null +++ b/chapter_05/examples/mutable_lambdas.cc @@ -0,0 +1,28 @@ +#include <algorithm> +#include <iostream> +#include <vector> +#include <utility> + +auto main() -> int +{ + using namespace std; + vector<unsigned long> v, w; + generate_n(back_inserter(v), 100, [i = 0UL]() mutable { + ++i; + return i * i; + }); + // v = [1, 4, 9, 16 ... ] + std::cout << " v = \n"; + for (auto el : v) + std::cout << el << "\n"; + generate_n(back_inserter(w), 50, [ i = 0UL, j = 1UL ]() mutable { + i = std::exchange(j, j + i); + return i; + }); + // w = [1, 1, 2, 3, 5, 8, 11 ...] + + std::cout << " w = \n"; + for (auto&& el : w) + std::cout << el << "\n"; +} +