ComputerScience/STL

[STL] vector

kyungmin.yu 2019. 4. 10. 17:49

STL을 배제하고 문제를 풀어보면서 가장 힘들었던게 vector를 못쓴다는 점이었다.

그래서 이번기회에 vector를 구현해봤다. 

평소에 안쓰던 문법을 많이 사용해본것같다.

 

- 2021.04.03 수정 (카라츠바 알고리즘 구현을 위해 생성자 추가)

#include <stdio.h>
#include <malloc.h>
template <class T>
class _vector{
private:
    T* _elements;
    int _size, _cap;

    void init(int cap) {
        _size = 0;
        _cap = cap;
        _elements = (T*) malloc(sizeof(T) * _cap);
    }
public:
    _vector(){
        init(32);
    }

    _vector(int cap, int init_value) {
        init(cap);
        for (int i = 0; i < cap; ++i) {
            push_back(init_value);
        }
    }

    _vector(_vector<T> v, int s, int e) {
        init(e - s + 1);
        for (int i = s; i < e; ++i) {
            push_back(v[i]);
        }
    }
    
    int size(){
        return _size;
    }
    
    void resize(int ncap){
        T* tmp = (T*) malloc(sizeof(T) * ncap);
        for(int i = 0; i < _size; i++)
            _elements[i] = tmp[i];
        free(_elements);
        _elements = tmp;
        _cap = ncap;
    }
    
    void push_back(T in){
        if(_size == _cap) {
            resize(_cap * 2);
        }
        _elements[_size++] = in;
    }
    
    void pop_back(){
        if(_size == 0) {
            return;
        }
        --_size;
    }

    T back() {
        return _elements[_size - 1];
    }

    T& operator [] (int idx){
        return _elements[idx];
    }
};

github.com/KyungminYu/Algorithm/blob/master/STL/_vector.cpp

 

KyungminYu/Algorithm

Contribute to KyungminYu/Algorithm development by creating an account on GitHub.

github.com

 

'ComputerScience > STL' 카테고리의 다른 글

[STL] priority_queue  (0) 2019.04.10
[STL] Queue  (0) 2019.04.10
[STL] Stack  (0) 2019.04.10