STL 벡터 그냥 사용법은 패스..
특징으로는
동적 배열
내부는 배열로 구성됨
임의 요소 접근이 가능함
Capacity가 가득 찼을 때 배열 길이를 늘여 메모리를 새로 할당 하고 기존 배열에서 요소를 옮겨야 해 느림 new(시스템콜) 커널에 요청
마지막 인덱스가 아닌 요소를 삭제할 때 뒤의 요소를 옮겨야 해 느림, 할당된 메모리에 비해 적게 사용할 가능성이 있음
Capacity : 내부 배열의 길이
Size : 추가된 요소 개수
구현 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #pragma once template<typename T> class MyVector { private: size_t size; size_t capacity; T* list; public: MyVector(); MyVector(const int n); ~MyVector(); T& operator[](size_t index); T& at(size_t index); T& Front(); T& Back(); void Push_Back(const T& value); void Pop_Back(); void Clear(); size_t Size(); size_t Capacity(); }; template <typename T> MyVector<T>::MyVector() :size(0), capacity(0) { list = new T[capacity]; } template <typename T> MyVector<T>::MyVector(const int n) : size(n), capacity(n) { list = new T[capacity]; } template <typename T> MyVector<T>::~MyVector() { delete[] list; } template <typename T> T& MyVector<T>::operator[](size_t index) { /*if (index >= size) { throw new std::out_of_range("out_of_range"); }*/ return list[index]; } template <typename T> T& MyVector<T>::at(size_t index) { /*if (index >= size) { throw new std::out_of_range("out_of_range"); }*/ return list[index]; } template <typename T> T& MyVector<T>::Front() { return list[0]; } template <typename T> T& MyVector<T>::Back() { return list[size - 1]; } template <typename T> void MyVector<T>::Push_Back(const T& value) { if (capacity <= size) { capacity = size + 1; T* temp_list = new T[capacity]; for (size_t i = 0; i < size; i++) { temp_list[i] = list[i]; } //memcpy(temp_list, list, sizeof(T) * size); delete[] list; list = temp_list; } list[size++] = value; } template <typename T> void MyVector<T>::Pop_Back() { list[--size] = nullptr; } template <typename T> void MyVector<T>::Clear() { for (int i = 0; i < size; i++) { list[i] = nullptr; } size = 0; } template <typename T> size_t MyVector<T>::Size() { return size; } template <typename T> size_t MyVector<T>::Capacity() { return capacity; } | cs |
'개발 > C++' 카테고리의 다른 글
C++ HashMap 구현해보기 (unorder_map) (0) | 2019.03.03 |
---|---|
C++ 맵 구현해보기 (0) | 2019.02.23 |
C++ 리스트 구현해보기 (0) | 2019.01.26 |
C++ 메모리 구조 (0) | 2019.01.06 |
GoogleTest for C++ 사용하기 (0) | 2019.01.05 |