diff --git a/CPlusPlus20ForProgrammers-master/examples/ch06/a.out b/CPlusPlus20ForProgrammers-master/examples/ch06/a.out index bb04439..f593ff9 100755 Binary files a/CPlusPlus20ForProgrammers-master/examples/ch06/a.out and b/CPlusPlus20ForProgrammers-master/examples/ch06/a.out differ diff --git a/CPlusPlus20ForProgrammers-master/examples/ch06/fig06_12.cpp b/CPlusPlus20ForProgrammers-master/examples/ch06/fig06_12.cpp index 03679c8..2aa0a8f 100644 --- a/CPlusPlus20ForProgrammers-master/examples/ch06/fig06_12.cpp +++ b/CPlusPlus20ForProgrammers-master/examples/ch06/fig06_12.cpp @@ -29,6 +29,16 @@ T integrate (std::array x, F f){ } +auto integrate_auto (auto x, auto f){ + auto tmp{x[0]}; + tmp = 0.0; + for (auto s: x){ + tmp+= f(s); + } + return tmp; +} + + typedef double (*FUNC)(double&); @@ -71,6 +81,8 @@ int main() { std::cout << "Integration full template " << integrate(floats, f_lambda) << "\n"; + std::cout << "Integration auto " << integrate_auto(floats, f_lambda) << "\n"; + std::cout << "Lambda test " << g_lambda(floats) << "\n"; } diff --git a/CPlusPlus20ForProgrammers-master/examples/ch07/a.out b/CPlusPlus20ForProgrammers-master/examples/ch07/a.out index a6107a0..9f27eb8 100755 Binary files a/CPlusPlus20ForProgrammers-master/examples/ch07/a.out and b/CPlusPlus20ForProgrammers-master/examples/ch07/a.out differ diff --git a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_01.cpp b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_01.cpp index ae220a6..5914c99 100644 --- a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_01.cpp +++ b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_01.cpp @@ -2,6 +2,7 @@ // Pointer operators & and *. #include #include +#include using namespace std; int main() { @@ -12,6 +13,9 @@ int main() { << "\nThe value of aPtr is " << aPtr; cout << "\n\nThe value of a is " << a << "\nThe value of *aPtr is " << *aPtr << '\n'; + + std::shared_ptr < std::array > b = std::make_shared< std::array > (); + std::cout << (*b)[3] << " " << b->at(5) <<"\n"; } diff --git a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_03.cpp b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_03.cpp index a2e2fc7..f24a542 100644 --- a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_03.cpp +++ b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_03.cpp @@ -1,24 +1,49 @@ // fig07_03.cpp // Pass-by-reference with a pointer argument used to cube a // variable's value. -#include #include -void cubeByReference(int* nPtr); // prototype +void cubeByValue(int x); +void cubeByReference(int& x); // prototype +void cubeByPointer(int* nPtr); int main() { int number{5}; std::cout << "Original value of number is " << number << "\n"; - cubeByValue(number); // pass number by value to cubeByValue + cubeByPointer(&number); // pass number by value to cubeByValue std::cout << "New value of number is " << number <<"\n"; + int number1{5}; + + std::cout << "Original value of number is " << number1 << "\n"; + cubeByReference(number1); // pass number by value to cubeByValue + std::cout << "New value of number is " << number1 <<"\n"; + + + int number2{5}; + std::cout << "Original value of number is " << number2 << "\n"; + cubeByValue(number2); // pass number by value to cubeByValue + std::cout << "New value of number is " << number2 <<"\n"; + + + + } // calculate cube of *nPtr; modifies variable number in main -void cubeByReference(int* nPtr) { +void cubeByPointer(int* nPtr) { *nPtr = *nPtr * *nPtr * *nPtr; // cube *nPtr } +void cubeByValue(int x) { + x = x * x * x; // cube *nPtr +} + +void cubeByReference(int& x) { + x = x * x * x; // cube *nPtr +} + + /************************************************************************** * (C) Copyright 1992-2022 by Deitel & Associates, Inc. and * * Pearson Education, Inc. All Rights Reserved. * diff --git a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_06.cpp b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_06.cpp index 51537d7..eb5941f 100644 --- a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_06.cpp +++ b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_06.cpp @@ -1,6 +1,5 @@ // fig07_06.cpp // C++20: Creating std::arrays with to_array. -#include #include #include @@ -9,8 +8,9 @@ int main() { const auto display{ [](const auto& items) { for (const auto& item : items) { - std::cout << fmt::format("{} ", item); + std::cout << item << " "; } + std::cout << "\n"; } }; @@ -19,14 +19,12 @@ int main() { // creating a std::array from a built-in array const auto array1{std::to_array(values1)}; - std::cout << fmt::format("array1.size() = {}\n", array1.size()) - << "array1: "; + std::cout << "array1.size(): " << array1.size() << " array1: "; display(array1); // use lambda to display contents // creating a std::array from an initializer list const auto array2{std::to_array({1, 2, 3, 4})}; - std::cout << fmt::format("\n\narray2.size() = {}\n", array2.size()) - << "array2: "; + std::cout << "array2.size(): " << array2.size() << " array2: "; display(array2); // use lambda to display contents std::cout << '\n'; diff --git a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_10.cpp b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_10.cpp index f7e8d42..23b666c 100644 --- a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_10.cpp +++ b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_10.cpp @@ -2,19 +2,38 @@ // Sizeof operator when used on a built-in array's name // returns the number of bytes in the built-in array. #include +#include size_t getSize(double* ptr); // prototype +size_t getSize_span(std::span ptr); + +void print_arr(auto a){ + for (auto x: a) + std::cout << x << " "; +} + +void fill_arr(auto& a){ + for (auto x: a) + x = 0; +} + int main() { double numbers[20]; // 20 doubles; occupies 160 bytes on our system + auto numbers_span {std::span(numbers)}; + fill_arr(numbers_span); std::cout << "Number of bytes in numbers is " << sizeof(numbers)<<"\n"; - std::cout << "Actual nukber of elements : " << sizeof(numbers)/sizeof(double) << "\n"; + std::cout << "Actual number of elements : " << sizeof(numbers)/sizeof(double) << "\n"; std::cout << "Number of bytes returned by getSize is " << getSize(numbers) << "\n"; + + std::cout << "Actual number of elements returned by getSize_span is " << getSize_span(numbers) << "\n"; + + print_arr(numbers_span); } // return size of ptr @@ -22,6 +41,11 @@ size_t getSize(double* ptr) { return sizeof(ptr); } +size_t getSize_span(std::span ptr) { + return ptr.size(); +} + + /**************************************************************************