Skip to content

Commit a279f2c

Browse files
committedMar 15, 2019
Customer Iterator implementation
1 parent ae48bd1 commit a279f2c

File tree

2 files changed

+142
-0
lines changed

2 files changed

+142
-0
lines changed
 

‎Custom_Iterator.cpp

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
Compile using 'g++ Custom_Iterator.cpp -o Custom_Iterator --std=c++11'
3+
*/
4+
5+
#include "Custom_Iterator.h"
6+
7+
using custom_iterator::vector;
8+
9+
int main() {
10+
vector< int > myVector;
11+
myVector.push_back( 10 );
12+
myVector.push_back( 20 );
13+
myVector.push_back( 30 );
14+
15+
for( int i = 0; i < myVector.size(); i++ ) {
16+
cout << myVector[ i ] << endl;
17+
}
18+
19+
vector<int>::iterator iter;
20+
for( iter = myVector.begin(); iter != myVector.end(); ++iter ) {
21+
*iter += 20;
22+
cout << *iter << endl;
23+
}
24+
25+
for( iter = myVector.rbegin(); iter != myVector.rend(); --iter ) {
26+
*iter -= 20;
27+
cout << *iter << endl;
28+
}
29+
return 0;
30+
}

‎Custom_Iterator.h

+112
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
#include <iostream>
2+
3+
using std::cout;
4+
using std::endl;
5+
6+
namespace custom_iterator {
7+
8+
template< typename T > class vector {
9+
public:
10+
vector() {
11+
size_ = 0;
12+
capacity = CAPACITY;
13+
data = new T[ capacity ];
14+
}
15+
16+
~vector() {
17+
delete [] data;
18+
data = NULL;
19+
size_ = 0;
20+
}
21+
22+
/* iterator class */
23+
class iterator {
24+
public:
25+
iterator() {}
26+
27+
iterator( T *ptr ) {
28+
current = ptr;
29+
}
30+
31+
/* overload != operator */
32+
bool operator!=( const iterator &rhs ) {
33+
return this->current != rhs.current;
34+
}
35+
36+
/* overload prefix ++ operator */
37+
iterator& operator++() {
38+
++current;
39+
return *this;
40+
}
41+
42+
/* overload prefix -- operator */
43+
iterator& operator--() {
44+
--current;
45+
return *this;
46+
}
47+
48+
/* overload * (de-reference) operator */
49+
T& operator*() {
50+
return *current;
51+
}
52+
53+
private:
54+
T *current;
55+
}; /* iterator class ends here */
56+
57+
iterator begin() const {
58+
return iterator( data );
59+
}
60+
61+
iterator end() const {
62+
return iterator( data + size_ );
63+
}
64+
65+
/* reverse begin */
66+
iterator rbegin() const {
67+
return iterator( data + size_ - 1 );
68+
}
69+
70+
/* reverse end */
71+
iterator rend() const {
72+
return iterator( data - 1 );
73+
}
74+
75+
int size() {
76+
return size_;
77+
}
78+
79+
void push_back( const T &value ) {
80+
if( size_ == capacity )
81+
expand();
82+
data[ size_ ] = value;
83+
size_++;
84+
}
85+
86+
const T& operator[]( int pos ) const {
87+
return data[ pos ];
88+
}
89+
90+
T& operator[]( int pos ) {
91+
return data[ pos ];
92+
}
93+
private:
94+
void expand();
95+
const int CAPACITY = 16;
96+
unsigned int size_;
97+
unsigned int capacity;
98+
T *data;
99+
};
100+
101+
template<typename T>
102+
void vector<T>::expand() {
103+
capacity += CAPACITY;
104+
T *newData = new T[ capacity ];
105+
for( int i = 0; i < size_; i++ ) {
106+
newData[ i ] = data[ i ];
107+
}
108+
delete [] data;
109+
data = newData;
110+
}
111+
112+
} // namespace custom_iterator ends

0 commit comments

Comments
 (0)
Please sign in to comment.