안녕하세요, 즈런이에요~
오랜만에 글을 올리는데,
요즘 너무 나태해져서...
아무튼 오늘부터 조금씩 손에 코드도 좀 로딩해보려구요.
Expert 준비해보려고 편하게 쓰던 STL 종류들 직접 짜보면서 손에 익히는 중이에요.
계속 못따는건 실력이 없어서겠죠 ㅠ
한 1년 준비하다보면 되지 않을까요?
아래 코드는 아직 검증해본적이 없어요..
그냥 막 짜보는 중입니다.
수정해야할 부분 있으면 말씀해주세요.
(2020.02.03 수정)
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 | #ifndef __VECTOR_H__ #define __VECTOR_H__ #include <cstdio> #include <cstdlib> using namespace std; template <class T> class Vector{ private: int sz,idx; T *arr; private: void expand(int size); public: Vector(); virtual ~Vector(); void clear(); void push_back(T x); void pop_back() { idx--; } void resize(int size); int size() const; T& operator[](int at) const; }; //public functions template <class T> Vector<T>::Vector():sz(1),idx(0) { arr = (T*)malloc(sizeof(T)); } template <class T> Vector<T>::~Vector() { if(arr) free(arr); } template <class T> void Vector<T>::clear() { idx=0; } template <class T> void Vector<T>::push_back(T x) { if(idx>=sz) { sz<<=1; expand(sz); } arr[idx++] = x; } template <class T> void Vector<T>::resize(int size) { if(size<=0) clear(); else idx = size; //if(idx >= (1<<30)) exit(1); //error if(idx >= sz) { while(idx>=sz) sz<<=1; T *tmp = NULL; while(true) { T *tmp = (T*)realloc(arr, (sz)*sizeof(T)); if(tmp != NULL) { arr = tmp; break; } } } } template <class T> int Vector<T>::size() const { return idx; } template <class T> T& Vector<T>::operator[](int at) const { return arr[at]; } //private functions template <class T> void Vector<T>::expand(int size) { while(true) { T *tmp = (T*)realloc(arr, (sz)*sizeof(T)); if(tmp != NULL) { arr = tmp; break; } } } #endif | cs |
'Algorithm > Data Structure' 카테고리의 다른 글
[Ex준비] Vector, MaxHeap, MinHeap → .cpp로 구현 (0) | 2018.11.09 |
---|---|
[Ex준비] C++ Heap.h (priority_queue) (0) | 2018.11.09 |
구간 업데이트와 구간 합이 모두 O(logN)에 가능한 펜윅트리 (Fenwick Tree Lazy Propagation) (4) | 2018.08.04 |