lesson_2
This commit is contained in:
parent
fe8ca99a6b
commit
4890087bf5
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Timer.hpp
|
||||||
|
*
|
||||||
|
* Created on: 26 сент. 2021 г.
|
||||||
|
* Author: alexander
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
|
class Timer
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
using clock_t = std::chrono::high_resolution_clock;
|
||||||
|
using second_t = std::chrono::duration<double, std::ratio<1> >;
|
||||||
|
|
||||||
|
std::string m_name;
|
||||||
|
std::chrono::time_point<clock_t> m_beg;
|
||||||
|
double elapsed() const
|
||||||
|
{
|
||||||
|
return std::chrono::duration_cast<second_t>(clock_t::now() -m_beg).count();
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
Timer() : m_beg(clock_t::now()) { }
|
||||||
|
Timer(std::string name) : m_name(name), m_beg(clock_t::now()) { }
|
||||||
|
|
||||||
|
void start(std::string name) {
|
||||||
|
m_name = name;
|
||||||
|
m_beg = clock_t::now();
|
||||||
|
}
|
||||||
|
void print() const {
|
||||||
|
std::cout << m_name << ":\t" << elapsed() * 1000 << " ms" << '\n';
|
||||||
|
}
|
||||||
|
};
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,157 @@
|
||||||
|
/*
|
||||||
|
* main.cpp
|
||||||
|
*
|
||||||
|
* Created on: 26 сент. 2021 г.
|
||||||
|
* Author: alexander
|
||||||
|
*/
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <vector>
|
||||||
|
#include <algorithm>
|
||||||
|
#include "Timer.hpp"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
void Swap(T *a, T *b)
|
||||||
|
{
|
||||||
|
T temp = *a;
|
||||||
|
*a = *b;
|
||||||
|
*b = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
void SortPointers(vector<T*> &v)
|
||||||
|
{
|
||||||
|
sort(v.begin(), v.end(), [](const auto &v1, const auto &v2)
|
||||||
|
{
|
||||||
|
return *v1 < *v2;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void exercise_1()
|
||||||
|
{
|
||||||
|
int a(5);
|
||||||
|
int b(6);
|
||||||
|
|
||||||
|
Swap(&a, &b);
|
||||||
|
|
||||||
|
cout << a << ' ' << b << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void exercise_2()
|
||||||
|
{
|
||||||
|
int length = 5;
|
||||||
|
vector<int*> v;
|
||||||
|
|
||||||
|
for (int i = 0; i < length; ++i)
|
||||||
|
{
|
||||||
|
int *a = new int;
|
||||||
|
*a = rand() % 10;
|
||||||
|
v.push_back(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < length; ++i)
|
||||||
|
{
|
||||||
|
cout << *v[i] << ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
cout << endl;
|
||||||
|
|
||||||
|
SortPointers(v);
|
||||||
|
|
||||||
|
for (int i = 0; i < length; ++i)
|
||||||
|
{
|
||||||
|
cout << *v[i] << ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
cout << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace counting
|
||||||
|
{
|
||||||
|
const string_view vowels
|
||||||
|
{ "AEIOUaeiou" };
|
||||||
|
|
||||||
|
void way1(const string_view &s)
|
||||||
|
{
|
||||||
|
Timer timer("Counting vowels [way 1]");
|
||||||
|
size_t count = count_if(s.begin(), s.end(), [&](const auto &c)
|
||||||
|
{
|
||||||
|
return vowels.find(c) != string::npos;
|
||||||
|
});
|
||||||
|
cout << count << endl;
|
||||||
|
timer.print();
|
||||||
|
}
|
||||||
|
|
||||||
|
void way2(const string_view &s)
|
||||||
|
{
|
||||||
|
Timer timer("Counting vowels [way 2]");
|
||||||
|
size_t count = count_if(s.begin(), s.end(), [&](const auto &c)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < vowels.size(); ++i)
|
||||||
|
{
|
||||||
|
if (vowels[i] == c)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
cout << count << endl;
|
||||||
|
timer.print();
|
||||||
|
}
|
||||||
|
|
||||||
|
void way3(const string_view &s)
|
||||||
|
{
|
||||||
|
size_t count = 0;
|
||||||
|
Timer timer("Counting vowels [way 3]");
|
||||||
|
for (size_t i = 0; i < s.size(); ++i)
|
||||||
|
{
|
||||||
|
if (vowels.find(s[i]) != string::npos)
|
||||||
|
{
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << count << endl;
|
||||||
|
timer.print();
|
||||||
|
}
|
||||||
|
|
||||||
|
void way4(const string_view &s)
|
||||||
|
{
|
||||||
|
size_t count = 0;
|
||||||
|
Timer timer("Counting vowels [way 4]");
|
||||||
|
for (size_t i = 0; i < s.size(); ++i)
|
||||||
|
{
|
||||||
|
for (size_t j = 0; j < vowels.size(); ++j)
|
||||||
|
{
|
||||||
|
if (vowels[j] == s[i])
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << count << endl;
|
||||||
|
timer.print();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void exercise_3()
|
||||||
|
{
|
||||||
|
ifstream file("War_and_peace.txt");
|
||||||
|
file.seekg(0, ios::end);
|
||||||
|
size_t size = file.tellg();
|
||||||
|
file.seekg(0);
|
||||||
|
string s(size, ' ');
|
||||||
|
file.read(&s[0], size);
|
||||||
|
|
||||||
|
counting::way1(s); // Counting vowels [way 1]: 59.6968 ms
|
||||||
|
counting::way2(s); // Counting vowels [way 2]: 177.219 ms
|
||||||
|
counting::way3(s); // Counting vowels [way 3]: 51.9079 ms
|
||||||
|
counting::way4(s); // Counting vowels [way 4]: 234.762 ms
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
// exercise_1();
|
||||||
|
// exercise_2();
|
||||||
|
exercise_3();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue