-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathvector.h
118 lines (104 loc) · 1.88 KB
/
vector.h
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#ifndef _H_VECTOR
#define _H_VECTOR
#include <iostream>
#include <vector>
namespace summercamp {
template <typename T>
class vector {
public:
vector() : m_size(0), m_Max(0), m_data(NULL){};
vector(int size,T data):m_size(size),m_data(new T[size]), m_Max(size){
m_data[0] = data;
}
vector(const vector& arr)
{
m_Max = arr.m_size;
m_size = arr.m_size;
m_data = new T[m_size];
for(int i = 0; i < m_size; i++)
{
m_data[i] = arr.m_data[i];
}
}
~vector(){
Free();
}
int size(){
return m_size;
}
int capacity(){
return m_Max;
}
void reserve(int max){
if(max>m_Max)
{
T *newdata = new T[max];
for(int i = 0 ; i < m_size ; i++)
{
newdata[i] = m_data[i];
}
/* for(int i = m_size ; i < max ; i++)
{
newdata[i] = (T) 0;
}*/
delete []m_data;
m_data = newdata;
m_Max = max;
}
}
bool empty(){
if(m_size)
return 0;
else
return 1;
}
void push_back(T data)
{
if(m_Max == 0)
{
reserve(2);
}
if(m_size == m_Max)
{
reserve(2 * m_Max);
}
*(m_data + m_size) = data;
m_size++;
}
void resize(int size, T data = (T)0)
{
push_back(data);
if(size > m_Max)
{
reserve(size);
}
m_size = size;
}
T& operator [] (int index) const
{
if(judgeindex(index))
{
return *(m_data + index);
}
}
void clear(){
m_size = 0;
}
private:
T *m_data;
int m_size;
int m_Max;
private:
void Init();
void Free() {
delete[] m_data;
m_data = NULL;
}
inline int judgeindex(int nindex)const{
if(nindex > m_size)
return 0;
else return 1;
}
};
}
#endif