diff options
Diffstat (limited to 'graphs/cpp/int_container/int_container.cc')
| -rw-r--r-- | graphs/cpp/int_container/int_container.cc | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/graphs/cpp/int_container/int_container.cc b/graphs/cpp/int_container/int_container.cc new file mode 100644 index 0000000..aabb5ab --- /dev/null +++ b/graphs/cpp/int_container/int_container.cc @@ -0,0 +1,83 @@ +#include "int_container.hh" +MyIntContainer::MyIntContainer(size_t size) + : current_size_{ 0 } + , max_size_{ size } + , elems_{ std::make_unique<int[]>(size) } +{} +void MyIntContainer::print() const +{ + if (current_size_ == 0) + return; + std::cout << elems_[0]; + for (size_t i = 1; i < current_size_; ++i) + { + std::cout << " | " << elems_[i]; + } + std::cout << "\n"; +} +size_t MyIntContainer::get_len() const +{ + return current_size_; +} +bool MyIntContainer::add(int elem) +{ + if (current_size_ == max_size_) + return false; + elems_[current_size_++] = elem; + return true; +} +std::optional<int> MyIntContainer::pop() +{ + if (current_size_ == 0) + return std::nullopt; + int res = elems_[--current_size_]; + elems_[current_size_] = -1; + return res; +} +std::optional<int> MyIntContainer::get(size_t position) const +{ + if (position >= current_size_) + return std::nullopt; + return elems_[position]; +} +std::optional<size_t> MyIntContainer::find(int elem) const +{ + size_t i; + for (i = 0; i < current_size_ && elems_[i] != elem; ++i) + continue; + if (i == current_size_) + return std::nullopt; + return i; +} +void swap(int& a, int& b) +{ + int tmp = a; + a = b; + b = tmp; +} +void MyIntContainer::sort() +{ + for (size_t i = 0; i < current_size_ - 1; i++) + { + bool flag = false; + for (size_t j = 0; j < current_size_ - i - 1; j++) + { + if (elems_[j] > elems_[j + 1]) + { + swap(elems_[j], elems_[j + 1]); + flag = true; + } + } + if (!flag) + break; + } +} +bool MyIntContainer::is_sorted() const +{ + for (size_t i = 1; i < current_size_; i++) + { + if (elems_[i - 1] > elems_[i]) + return false; + } + return true; +}
\ No newline at end of file |
