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 elSize = 0;
- unsigned int totalSize = 10;
- T* elements = nullptr;
- void reserve(unsigned int size)
- {
- if (size < totalSize)
- return; //Don't shrink
- else
- {
- T* newData = new T[size];
- for (unsigned int i = 0; i < elSize; ++i)
- newData[i] = elements[i];
- elements = newData;
- }
- }
- public:
- DiyVector() : totalSize(10), elSize(0), elements(new T[totalSize]){}
- ~DiyVector() { delete elements; }
- T& at(unsigned int index) const
- {
- if (index >= elSize)
- throw new OutOfRange();
- return elements[index];
- }
- unsigned int size() const
- {
- return elSize;
- }
- void pushBack(const T& item)
- {
- if (elSize + 1 > totalSize)
- reserve(totalSize * 1.5);
- elements[elSize++] = item;
- }
- void popBack()
- {
- --elSize;
- }
- void erase(unsigned int index)
- {
- if (index >= elSize)
- throw new OutOfRange();
- for (unsigned int i = index; i < elSize - 1; ++i)
- {
- elements[i] = elements[i] + 1;
- }
- }
- void insert(unsigned int index, const T& item)
- {
- if (index >= elSize + 1)
- throw new OutOfRange();
- if (elSize + 1 > totalSize)
- reserve(totalSize * 1.5);
- elSize += 1;
- for (unsigned int i = index + 1; i < elSize - 1; ++i)
- {
- elements[i + 1] = elements[i];
- }
- elements[index] = item;
- }
- void print()
- {
- for (int i = 0; i < elSize; i++)
- {
- std::cout << elements[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