Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cstring>
- #include <memory>
- #include <algorithm>
- template <typename T>
- class DiyVector
- {
- private:
- unsigned int m_size = 0;
- unsigned int m_capacity = 10;
- std::unique_ptr<T[]> m_data = nullptr;
- void reserve(unsigned int size)
- {
- if (size < m_capacity)
- return; //Don't shrink
- else
- {
- std::unique_ptr<T[]> newData = std::make_unique<T[]>(size);
- for (unsigned int i = 0; i < m_size; ++i)
- newData[i] = m_data[i];
- m_data = std::move(newData);
- }
- }
- public:
- DiyVector() { m_data = std::make_unique<T[]>(10); }
- ~DiyVector() = default;
- T& at(unsigned int index) const
- {
- if (index >= m_size)
- throw new OutOfRange();
- return m_data[index];
- }
- unsigned int size() const
- {
- return m_size;
- }
- void pushBack(const T& item)
- {
- if (m_size + 1 > m_capacity)
- reserve(m_capacity * 1.5);
- m_data[m_size++] = item;
- }
- void popBack()
- {
- --m_size;
- }
- void erase(unsigned int index)
- {
- if (index >= m_size)
- throw new OutOfRange();
- for (unsigned int i = index; i < m_size - 1; ++i)
- {
- m_data[i] = m_data[i] + 1;
- }
- }
- void insert(unsigned int index, const T& item)
- {
- if (index >= m_size + 1)
- throw new OutOfRange();
- if (m_size + 1 > m_capacity)
- reserve(m_capacity * 1.5);
- for (unsigned int i = index + 1; i < ++m_size; ++i)
- {
- m_data[i + 1] = m_data[i];
- }
- m_data[index] = item;
- }
- void print()
- {
- for (int i = 0; i < m_size; i++)
- {
- std::cout << m_data[i] << " ";
- }
- }
- class OutOfRange {};
- };
- int main()
- {
- DiyVector<int> v;
- std::cout << "array size: " << v.size() << "\n";
- v.pushBack(3);
- std::cout << "3\n";
- std::cout << "array size: " << v.size() << "\n";
- v.pushBack(4);
- std::cout << "4\n";
- v.pushBack(6);
- std::cout << "6\n";
- v.pushBack(2);
- std::cout << "2\n";
- std::cout << "array size: " << v.size() << "\n";
- v.print();
- std::cout << "\n";
- v.insert(1, 7);
- v.print();
- std::cout << "\n";
- v.erase(1);
- v.print();
- std::cout << "\n";
- v.pushBack(5);
- v.print();
- std::cout << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement