Ex9 feedback: missed the fourth assignment
This commit is contained in:
parent
6d63474276
commit
70f6134222
1 changed files with 82 additions and 0 deletions
82
ex9.1/d.cpp
Normal file
82
ex9.1/d.cpp
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
#include <thread>
|
||||||
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
#include <chrono>
|
||||||
|
#include <vector>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Compile with 'g++ -pthread a.cpp'
|
||||||
|
*
|
||||||
|
* Modifying an object
|
||||||
|
*/
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This method will push the addition of the last two elements on the vector.
|
||||||
|
*/
|
||||||
|
void manipulate(vector<double>& v) {
|
||||||
|
int sleep = 2;
|
||||||
|
for ( int i = 0; i < 5; i++ )
|
||||||
|
{
|
||||||
|
double a = 0;
|
||||||
|
|
||||||
|
// Only use the last two elements
|
||||||
|
int j = 0;
|
||||||
|
for ( auto rit = v.rbegin() ; rit != v.rend(); ++rit )
|
||||||
|
{
|
||||||
|
if ( j > 1 )
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
a += *rit;
|
||||||
|
++j;
|
||||||
|
}
|
||||||
|
|
||||||
|
v.push_back( a);
|
||||||
|
std::cout << "Updated Vector" << std::endl;
|
||||||
|
|
||||||
|
this_thread::sleep_for(std::chrono::seconds(sleep));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void display(vector<double>& v) {
|
||||||
|
int sleep = 1;
|
||||||
|
for ( int i = 0; i < 10; i++ )
|
||||||
|
{
|
||||||
|
std::cout << "Vector is now:" << std::endl;
|
||||||
|
|
||||||
|
std::cout << "{";
|
||||||
|
for ( int i = 0; i < v.size() ; i++ ) {
|
||||||
|
std::cout << v[i] << ", ";
|
||||||
|
}
|
||||||
|
std::cout << "}" << std::endl;
|
||||||
|
this_thread::sleep_for(std::chrono::seconds(sleep));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct my_f {
|
||||||
|
vector<double>& v;
|
||||||
|
|
||||||
|
my_f(vector<double>& vv): v(vv) {};
|
||||||
|
void my_function() { manipulate(v); };
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
vector<double> v { 1.1, 1.1 };
|
||||||
|
thread t {display, ref(v)};
|
||||||
|
|
||||||
|
my_f f{v};
|
||||||
|
thread t2( &my_f::my_function, std::ref(f) );
|
||||||
|
|
||||||
|
|
||||||
|
// Run the threads
|
||||||
|
t.join();
|
||||||
|
t2.join();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Reference in a new issue