diff --git a/CPlusPlus20ForProgrammers-master/examples/ch06/a.out b/CPlusPlus20ForProgrammers-master/examples/ch06/a.out new file mode 100755 index 0000000..f593ff9 Binary files /dev/null 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 12effbd..03679c8 100644 --- a/CPlusPlus20ForProgrammers-master/examples/ch06/fig06_12.cpp +++ b/CPlusPlus20ForProgrammers-master/examples/ch06/fig06_12.cpp @@ -15,18 +15,63 @@ int multiply_int(int x, int y) { } +double f(double& x){ + return x*x; +} + +template +T integrate (std::array x, F f){ + T tmp{T(0)}; + for (auto s: x){ + tmp+= f(s); + } + return tmp; +} + + +typedef double (*FUNC)(double&); + + +template +T integrate2 (std::array x, FUNC f){ + T tmp{T(0)}; + for (auto s: x){ + tmp+= f(s); + } + return tmp; +} + + int main() { constexpr std::array integers{1, 2, 3, 4, 5}; - constexpr std::array floats {1.0, 2.0, 3.0, 4.0, 5.0}; + std::array floats {1.0, 2.0, 3.0, 4.0, 5.0}; auto multiply_lambda = [](const auto& x, const auto& y) {return x * y; }; + auto f_lambda = [](auto& x) {return x*x;}; + + auto g_lambda = [&integers](auto& x) { + auto tmp{0}; + for (int i{0};auto s: x){ + tmp += s*integers[i]; + } + return tmp; + }; + std::cout << "Product of integers: " << std::accumulate( std::begin(integers), std::end(integers), 1, multiply) << "\n"; + std::cout << "Product of integers: " << std::accumulate( integers.cbegin(), integers.cend(), 1, multiply) << "\n"; + std::cout << "Product of integers with a lambda: " << std::accumulate(std::begin(integers), std::end(integers), 1, multiply_lambda) << "\n"; std::cout << "Product of integers with a lambda: " << std::accumulate(std::begin(floats), std::end(floats), 1, multiply_int) << "\n"; std::cout << "Product of integers with a lambda: " << std::accumulate(std::begin(floats), std::end(floats), 1, multiply_lambda) << "\n"; + + std::cout << "Integration2 template " << integrate2(floats, f) << "\n"; + + std::cout << "Integration full template " << integrate(floats, f_lambda) << "\n"; + + std::cout << "Lambda test " << g_lambda(floats) << "\n"; } diff --git a/CPlusPlus20ForProgrammers-master/examples/ch06/fig06_13.cpp b/CPlusPlus20ForProgrammers-master/examples/ch06/fig06_13.cpp index e04b316..ddb20a6 100644 --- a/CPlusPlus20ForProgrammers-master/examples/ch06/fig06_13.cpp +++ b/CPlusPlus20ForProgrammers-master/examples/ch06/fig06_13.cpp @@ -1,7 +1,6 @@ // fig06_13.cpp // Functional-style programming with C++20 ranges and views. #include -#include #include #include #include @@ -10,10 +9,10 @@ int main() { // lambda to display results of range operations auto showValues{ [](auto& values, const std::string& message) { - std::cout << fmt::format("{}: ", message); + std::cout << message << "\n"; for (const auto& value : values) { - std::cout << fmt::format("{} ", value); + std::cout << value << " "; } std::cout << '\n'; @@ -40,8 +39,8 @@ int main() { showValues(values4, "Squares of even integers"); // total the squares of the even integers - std::cout << fmt::format("Sum squares of even integers 2-10: {}\n", - std::accumulate(std::begin(values4), std::end(values4), 0)); + std::cout << "Sum squares of even integers 2-10: \n", + std::accumulate(std::begin(values4), std::end(values4), 0); // process a container's elements constexpr std::array numbers{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; diff --git a/CPlusPlus20ForProgrammers-master/examples/ch06/test.cpp b/CPlusPlus20ForProgrammers-master/examples/ch06/test.cpp new file mode 100644 index 0000000..e69de29 diff --git a/CPlusPlus20ForProgrammers-master/examples/ch06/vector.cpp b/CPlusPlus20ForProgrammers-master/examples/ch06/vector.cpp new file mode 100644 index 0000000..5d3f055 --- /dev/null +++ b/CPlusPlus20ForProgrammers-master/examples/ch06/vector.cpp @@ -0,0 +1,33 @@ +// resizing vector +#include +#include +#include + +int main () +{ + std::vector myvector; + // set some initial content: + for (int i=1;i<10;i++) myvector.push_back(i); + + myvector.resize(5); + std::cout << "myvector contains:"; + for (int i=0;i +#include using namespace std; int main() { diff --git a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_02.cpp b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_02.cpp index a0454ae..4fabfc3 100644 --- a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_02.cpp +++ b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_02.cpp @@ -1,6 +1,5 @@ // fig07_02.cpp // Pass-by-value used to cube a variable's value. -#include #include int cubeByValue(int n); // prototype @@ -8,9 +7,9 @@ int cubeByValue(int n); // prototype int main() { int number{5}; - std::cout << fmt::format("Original value of number is {}\n", number); + std::cout << "Original value of number is " << number << "\n"; number = cubeByValue(number); // pass number by value to cubeByValue - std::cout << fmt::format("New value of number is {}\n", number); + std::cout << "New value of number is " << number <<"\n"; } // calculate and return cube of integer argument diff --git a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_03.cpp b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_03.cpp index 0ca2ead..a2e2fc7 100644 --- a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_03.cpp +++ b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_03.cpp @@ -8,10 +8,10 @@ void cubeByReference(int* nPtr); // prototype int main() { int number{5}; + std::cout << "Original value of number is " << number << "\n"; + cubeByValue(number); // pass number by value to cubeByValue + std::cout << "New value of number is " << number <<"\n"; - std::cout << fmt::format("Original value of number is {}\n", number); - cubeByReference(&number); // pass number address to cubeByReference - std::cout << fmt::format("New value of number is {}\n", number); } // calculate cube of *nPtr; modifies variable number in main diff --git a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_10.cpp b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_10.cpp index 6b2ec5f..f7e8d42 100644 --- a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_10.cpp +++ b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_10.cpp @@ -1,7 +1,6 @@ // fig07_10.cpp // 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 @@ -9,11 +8,13 @@ size_t getSize(double* ptr); // prototype int main() { double numbers[20]; // 20 doubles; occupies 160 bytes on our system - std::cout << fmt::format("Number of bytes in numbers is {}\n\n", - sizeof(numbers)); - std::cout << fmt::format("Number of bytes returned by getSize is {}\n", - getSize(numbers)); + + std::cout << "Number of bytes in numbers is " << sizeof(numbers)<<"\n"; + + std::cout << "Actual nukber of elements : " << sizeof(numbers)/sizeof(double) << "\n"; + + std::cout << "Number of bytes returned by getSize is " << getSize(numbers) << "\n"; } // return size of ptr diff --git a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_13.cpp b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_13.cpp index 996d11c..001008d 100644 --- a/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_13.cpp +++ b/CPlusPlus20ForProgrammers-master/examples/ch07/fig07_13.cpp @@ -1,13 +1,12 @@ // fig07_13.cpp // Reading in command-line arguments. -#include #include int main(int argc, char* argv[]) { - std::cout << fmt::format("Number of arguments: {}\n\n", argc); + std::cout << "Number of arguments: " << argc << "\n"; - for (int i{0}; i < argc; ++i) { - std::cout << fmt::format("{}\n", argv[i]); + for (int i{1}; i < argc; ++i) { + std::cout << argv[i] << "\n" ; } }