aboutsummaryrefslogtreecommitdiffstats
path: root/lab 1/src/intvector.cpp
blob: fae9ff0918fb741b8cbd3c6e10e6e7888e5a97a6 (plain)
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
#include "../include/intvector.hpp"

intvector::intvector() {
    vector_pointer = new int[1];
    vector_size = 0;
    vector_capacity = 1;
}

intvector::intvector(const intvector& input_vector) {
    vector_pointer = new int[1];
    vector_size = 0;
    vector_capacity = 1;
    *this = input_vector;
}

intvector::intvector(int size) {
    vector_size = size;
    vector_capacity = pow(2, ceil(log2(size+1)));
    vector_pointer = new int[vector_size];

    for(int i = 0; i < vector_size; ++i) {
        vector_pointer[i] = 0;
    }
}

intvector::~intvector() {
    delete[] vector_pointer;
}

intvector& intvector::operator=(const intvector& input_vector) {
    delete[] vector_pointer;
    vector_size = input_vector.size();
    vector_capacity = input_vector.capacity();
    vector_pointer = new int[vector_capacity];
    
    for(int i = 0; i < input_vector.size(); ++i) {
        vector_pointer[i] = input_vector[i];
    }

    return *this;
}

int& intvector::operator[](const int& index) {
    if(index < vector_size)
        return vector_pointer[index];
    return vector_size;
}

const int& intvector::operator[](const int& index) const {
    if(index < vector_size)
        return vector_pointer[index];
    return vector_size;
}

void intvector::push_back(int i) {
    if(vector_size >= vector_capacity) {
        intvector tmp(vector_size);
        for(int j = 0; j < vector_size; ++j) {
            tmp[j] = vector_pointer[j];
        }
        *this = tmp;
    }
    vector_pointer[vector_size] = i;
    ++vector_size;
}

int& intvector::at(const int& i) {
    if(i < vector_size)
        return vector_pointer[i];
    return vector_size;
}

int intvector::size() const {
    return vector_size;
}

int intvector::capacity() const {
    return vector_capacity;
}

int intvector::find(const int& i) const {
    for(int j = 0; j < vector_size; ++j) {
        if(vector_pointer[j] == i) {
            return j;
        }
    }
    return -1;
}