ch07 samples were modified
This commit is contained in:
parent
c5ee50737c
commit
5a612f8354
Binary file not shown.
|
@ -29,6 +29,16 @@ T integrate (std::array<T, N> 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&);
|
typedef double (*FUNC)(double&);
|
||||||
|
|
||||||
|
|
||||||
|
@ -71,6 +81,8 @@ int main() {
|
||||||
|
|
||||||
std::cout << "Integration full template " << integrate(floats, f_lambda) << "\n";
|
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";
|
std::cout << "Lambda test " << g_lambda(floats) << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -2,6 +2,7 @@
|
||||||
// Pointer operators & and *.
|
// Pointer operators & and *.
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <array>
|
#include <array>
|
||||||
|
#include <memory>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
@ -12,6 +13,9 @@ int main() {
|
||||||
<< "\nThe value of aPtr is " << aPtr;
|
<< "\nThe value of aPtr is " << aPtr;
|
||||||
cout << "\n\nThe value of a is " << a
|
cout << "\n\nThe value of a is " << a
|
||||||
<< "\nThe value of *aPtr is " << *aPtr << '\n';
|
<< "\nThe value of *aPtr is " << *aPtr << '\n';
|
||||||
|
|
||||||
|
std::shared_ptr < std::array<int,10> > b = std::make_shared< std::array<int,10> > ();
|
||||||
|
std::cout << (*b)[3] << " " << b->at(5) <<"\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,24 +1,49 @@
|
||||||
// fig07_03.cpp
|
// fig07_03.cpp
|
||||||
// Pass-by-reference with a pointer argument used to cube a
|
// Pass-by-reference with a pointer argument used to cube a
|
||||||
// variable's value.
|
// variable's value.
|
||||||
#include <fmt/format.h>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
void cubeByReference(int* nPtr); // prototype
|
void cubeByValue(int x);
|
||||||
|
void cubeByReference(int& x); // prototype
|
||||||
|
void cubeByPointer(int* nPtr);
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
int number{5};
|
int number{5};
|
||||||
std::cout << "Original value of number is " << number << "\n";
|
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";
|
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
|
// calculate cube of *nPtr; modifies variable number in main
|
||||||
void cubeByReference(int* nPtr) {
|
void cubeByPointer(int* nPtr) {
|
||||||
*nPtr = *nPtr * *nPtr * *nPtr; // cube *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 *
|
* (C) Copyright 1992-2022 by Deitel & Associates, Inc. and *
|
||||||
* Pearson Education, Inc. All Rights Reserved. *
|
* Pearson Education, Inc. All Rights Reserved. *
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
// fig07_06.cpp
|
// fig07_06.cpp
|
||||||
// C++20: Creating std::arrays with to_array.
|
// C++20: Creating std::arrays with to_array.
|
||||||
#include <fmt/format.h>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
|
@ -9,8 +8,9 @@ int main() {
|
||||||
const auto display{
|
const auto display{
|
||||||
[](const auto& items) {
|
[](const auto& items) {
|
||||||
for (const auto& item : 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
|
// creating a std::array from a built-in array
|
||||||
const auto array1{std::to_array(values1)};
|
const auto array1{std::to_array(values1)};
|
||||||
|
|
||||||
std::cout << fmt::format("array1.size() = {}\n", array1.size())
|
std::cout << "array1.size(): " << array1.size() << " array1: ";
|
||||||
<< "array1: ";
|
|
||||||
display(array1); // use lambda to display contents
|
display(array1); // use lambda to display contents
|
||||||
|
|
||||||
// creating a std::array from an initializer list
|
// creating a std::array from an initializer list
|
||||||
const auto array2{std::to_array({1, 2, 3, 4})};
|
const auto array2{std::to_array({1, 2, 3, 4})};
|
||||||
std::cout << fmt::format("\n\narray2.size() = {}\n", array2.size())
|
std::cout << "array2.size(): " << array2.size() << " array2: ";
|
||||||
<< "array2: ";
|
|
||||||
display(array2); // use lambda to display contents
|
display(array2); // use lambda to display contents
|
||||||
|
|
||||||
std::cout << '\n';
|
std::cout << '\n';
|
||||||
|
|
|
@ -2,19 +2,38 @@
|
||||||
// Sizeof operator when used on a built-in array's name
|
// Sizeof operator when used on a built-in array's name
|
||||||
// returns the number of bytes in the built-in array.
|
// returns the number of bytes in the built-in array.
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <span>
|
||||||
|
|
||||||
size_t getSize(double* ptr); // prototype
|
size_t getSize(double* ptr); // prototype
|
||||||
|
size_t getSize_span(std::span<double> 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() {
|
int main() {
|
||||||
double numbers[20]; // 20 doubles; occupies 160 bytes on our system
|
double numbers[20]; // 20 doubles; occupies 160 bytes on our system
|
||||||
|
|
||||||
|
auto numbers_span {std::span<double>(numbers)};
|
||||||
|
fill_arr(numbers_span);
|
||||||
|
|
||||||
|
|
||||||
std::cout << "Number of bytes in numbers is " << sizeof(numbers)<<"\n";
|
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 << "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
|
// return size of ptr
|
||||||
|
@ -22,6 +41,11 @@ size_t getSize(double* ptr) {
|
||||||
return sizeof(ptr);
|
return sizeof(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t getSize_span(std::span<double> ptr) {
|
||||||
|
return ptr.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
Loading…
Reference in New Issue