Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add dz_8
  • Loading branch information
Pauliwb committed Dec 9, 2018
2 parents 16cb665 + 937b0f7 commit f6be136
Show file tree
Hide file tree
Showing 108 changed files with 9,618 additions and 771 deletions.
179 changes: 114 additions & 65 deletions Astafeva/07/vector.h
Expand Up @@ -38,22 +38,61 @@ class Iterator : public std::iterator<std::random_access_iterator_tag, T> {
public:
explicit Iterator(pointer p) : p(p) {}
reference operator*() const {
return *p;
}
return *p;
}
void operator=(Iterator it){
p = it.p;
}
void operator=(pointer pt){
p = pt;
}
bool operator==(const Iterator<T>& it) const {
return p == it.p;
}
bool operator!=(const Iterator<T>& it) const {
return !(*this == it);
}
return p == it.p;
}
bool operator!=(const Iterator<T>& it) const {
return !(*this == it);
}
Iterator& operator++() {
++p;
return *this;
++p;
return *this;
}
Iterator& operator--() {
--p;
return *this;
}
Iterator& operator+=(size_type c) {
for (size_type i = 0; i < c; ++i) {
++p;
}
return *this;
}
Iterator& operator-=(size_type c) {
for (size_type i = 0; i < c; ++i) {
--p;
}
return *this;
}
Iterator operator+(size_type c) const {
return Iterator(p + c);
}
Iterator operator-(size_type c) const {
return Iterator(p - c);
}
bool operator>(const Iterator<T>& it) const {
return distance(it - p) > 0;
}
bool operator<(const Iterator<T>& it) const {
return distance(it - p) < 0;
}
bool operator>=(const Iterator<T>& it) const {
return distance(it - p) >= 0;
}
Iterator& operator--() {
--p;
return *this;
bool operator<=(const Iterator<T>& it) const {
return distance(it - p) <= 0;
}
reference operator[](size_type i) {
return p[i];
}
};

template <class T, class Alloc = Allocator<T>>
Expand All @@ -71,46 +110,46 @@ class Vector {
size_type sz;
size_type all_sz;
public:
explicit Vector(size_type count) : sz(count), all_sz(count << 1) {
explicit Vector(size_type count) : sz(count), all_sz(count << 1) {
data = all.allocate(all_sz);
for (size_type i = 0; i < sz; ++i) {
all.construct(data + i);
}
}
explicit Vector() : data(NULL), sz(0), all_sz(4) {
}
explicit Vector() : sz(0), all_sz(4) {
data = all.allocate(all_sz);
}
Vector(const Vector& V) : sz(V.sz), all_sz(V.all_sz) {
data = all.allocate(all_sz);
for(size_type i = 0; i < sz; ++i)
all.construct(data + i, V.data[i]);
}
data = all.allocate(all_sz);
for(size_type i = 0; i < sz; ++i)
all.construct(data + i, V.data[i]);
}
Vector(Vector&& V) : data(V.data), sz(V.sz), all_sz(V.all_sz) {
V.sz = 0;
V.all_sz = 0;
V.data = nullptr;
V.all_sz = 0;
V.data = nullptr;
}
Vector& operator=(const Vector& V) {
if (this == &V)
return *this;
pointer t = all.allocate(V.all_sz);
for (size_type i = 0; i < V.sz; ++i)
all.construct(t[i], V.data[i]);
for (size_type i = 0; i < sz; ++i)
all.destroy(data[i]);
all.deallocate(data);
sz = V.sz;
all_sz = V.all_sz;
data = t;
return *this;
}
if (this == &V)
return *this;
pointer t = all.allocate(V.all_sz);
for (size_type i = 0; i < V.sz; ++i)
all.construct(t[i], V.data[i]);
for (size_type i = 0; i < sz; ++i)
all.destroy(data[i]);
all.deallocate(data);
sz = V.sz;
all_sz = V.all_sz;
data = t;
return *this;
}
void clear() noexcept {
for (size_type i = 0; i < sz; ++i) {
all.destroy(data + i);
}
sz = 0;
all_sz = 0;
}
for (size_type i = 0; i < sz; ++i) {
all.destroy(data + i);
}
sz = 0;
all_sz = 0;
}
~Vector() {
clear();
all.deallocate(data);
Expand All @@ -122,14 +161,14 @@ class Vector {
return data[id];
}
bool empty() const {
return sz == 0;
}
size_type size() const {
return sz;
}
size_type capacity() const {
return all_sz;
}
return sz == 0;
}
size_type size() const {
return sz;
}
size_type capacity() const {
return all_sz;
}
void push_back(value_type&& value) {
if (sz == all_sz)
reserve(all_sz << 1);
Expand All @@ -149,20 +188,30 @@ class Vector {
}
}
const reference front() const {
if(sz != 0)
return data[0];
if(sz != 0)
return data[0];
throw std::out_of_range("");
}
const reference back() const {
if(sz != 0)
return data[sz - 1];
}
const reference back() const {
if(sz != 0)
return data[sz - 1];
throw std::out_of_range("");
}
}
const reference front() {
if(sz != 0)
return data[0];
throw std::out_of_range("");
}
const reference back() {
if(sz != 0)
return data[sz - 1];
throw std::out_of_range("");
}
void reserve(size_type count) {
if (all_sz < count) {
pointer ndata = all.allocate(count);
for (size_type i = 0; i < sz; ++i) {
all.construct(ndata + i, std::forward<value_type>(*(data + i)));
all.construct(ndata + i, *(data + i));
all.destroy(data + i);
}
all.deallocate(data);
Expand All @@ -172,16 +221,16 @@ class Vector {
}
void resize(size_type newSize) {
if (sz > newSize) {
for (size_type i = newSize; i < sz; ++i) {
all.destroy(data + i);
}
for (size_type i = newSize; i < sz; ++i) {
all.destroy(data + i);
}
} else {
if (all_sz < newSize)
this->reserve(newSize << 1);
for (size_type i = sz; i < newSize; i++)
all.construct(data + i);
}
sz = newSize;
if (all_sz < newSize)
this->reserve(newSize << 1);
for (size_type i = sz; i < newSize; i++)
all.construct(data + i);
}
sz = newSize;
}
iterator begin() const noexcept {
return iterator(data);
Expand Down
31 changes: 31 additions & 0 deletions Astafeva/08/pingpong.cpp
@@ -0,0 +1,31 @@
#include <thread>
#include <mutex>

using namespace std;

const int MAX_ITER = 500000;
mutex pi, po;

void ping() {
for (int i = 0; i < MAX_ITER; ++i) {
pi.lock();
printf("ping\n");
po.unlock();
}
}

void pong() {
for (int i = 0; i < MAX_ITER; ++i) {
po.lock();
printf("pong\n");
pi.unlock();
}
}

int main() {
thread t1(ping);
thread t2(pong);
t1.join();
t2.join();
return 0;
}
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 comments on commit f6be136

Please sign in to comment.