-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvector.cpp
114 lines (91 loc) · 3.02 KB
/
vector.cpp
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
#include "vector.h"
using namespace std;
/* -------------------------------------------------------------------------------------- */
/* PROTECTED FUNCTIONS */
/* -------------------------------------------------------------------------------------- */
void vector::resize ( int size )
{
m_MaxSize = size;
double * newpole = new double [ size ];
for ( int i = 0; i < ( m_Size > size ? size : m_Size ); i ++ )
newpole [ i ] = m_Vector [ i ];
m_Size = m_Size > size ? size : m_Size;
delete [] m_Vector;
m_Vector = newpole;
}
/* -------------------------------------------------------------------------------------- */
/* CONSTRUCTORS */
/* -------------------------------------------------------------------------------------- */
vector::vector ( int size ) : m_MaxSize ( size ), m_Size ( 0 )
{
m_Vector = new double [ m_MaxSize ];
for ( int i = 0; i < m_MaxSize; i ++ )
m_Vector [ i ] = 0.0;
}
vector::vector ( int size, double number ) : m_MaxSize ( size ), m_Size ( size )
{
m_Vector = new double [ m_MaxSize ];
for ( int i = 0; i < m_MaxSize; i ++ )
m_Vector [ i ] = number;
}
vector::vector ( const vector & x ) : m_MaxSize ( x . m_MaxSize ), m_Size ( x . m_Size )
{
m_Vector = new double [ m_MaxSize ];
for ( int i = 0; i < m_MaxSize; i ++ )
m_Vector [ i ] = x . m_Vector [ i ];
}
vector::~vector ( void )
{
delete [] m_Vector;
}
/* -------------------------------------------------------------------------------------- */
/* FUNCTIONS */
/* -------------------------------------------------------------------------------------- */
vector & vector::operator = ( const vector & x )
{
if ( &x == this )
return *this;
delete [] m_Vector;
m_MaxSize = x . m_MaxSize;
m_Size = x . m_Size;
m_Vector = new double [ m_MaxSize ];
for ( int i = 0; i < m_MaxSize; i ++ )
m_Vector [ i ] = x . m_Vector [ i ];
return *this;
}
double & vector::operator [] ( int index )
{
if ( index > m_MaxSize - 1 || index < 0 )
throw new InvalidIndexException ( "Index is out of range" );
m_Size = index + 1;
return m_Vector [ index ];
}
const double & vector::operator [] ( int index ) const
{
if ( index > m_MaxSize - 1 || index < 0 )
throw new InvalidIndexException ( "Index is out of range" );
return m_Vector [ index ];
}
int vector::size ( void ) const
{
return m_Size;
}
/* -------------------------------------------------------------------------------------- */
/* PRINT FUNCTIONS */
/* -------------------------------------------------------------------------------------- */
void vector::print ( ostream & os ) const
{
os << "[ ";
for ( int i = 0; i < m_Size; i ++ )
{
os << m_Vector [ i ];
if ( i != m_Size - 1 )
os << ", ";
}
os << " ]";
}
ostream & operator << ( ostream & os, const vector & x )
{
x . print ( os );
return os;
}