C++: create a simple staticArray class with templates and iterators. Requirement
ID: 3821809 • Letter: C
Question
C++:
create a simple staticArray class with templates and iterators.
Requirements for the staticArray class:
1.Create two private member variables:
a.A static const int MAX set to 10 (why static const?)
b.A static array of MAX elements (type from template). Assume the static array will only hold numeric types.
2.Create a set method that sets an array element to a given value.
a.Parameters: the position (int), the value which must be in range 0 to 100 (type from template).
b.Do not create a get method, you will use iterators to access the data.
3.Create a begin method that returns an iterator.
a.Parameters: none.
b.Returns: the staticArrayIterator pointing to the first element.
4.Create an end method that returns an iterator.
a.Parameters: none.
b.Returns: the staticArrayIterator pointing to the last element.
5.Create a default constructor that sets all 10 elements to 0.
Requirements for the staticArrayIterator class:
1.Tip: look at the iterator class Malik created for linkedList.h for guidance.
2.The class will have a single private member: a pointer (type from template). This will be used to point to an element of the staticArray.
3.Create a default constructor that sets the pointer to NULL (or nullptr).
4.Create a parameterized constructor that takes a pointer (type from template) and sets the private member variable to that pointer.
5.Create a dereferencing operator that returns the de-referenced pointer.This will be used to access array elements.
6.Create an overloaded pre-increment operator that increments the pointer (i.e., so it points to the next array element).
7.Create overloaded == and != operators to compare iterators. Iterators are equal if they reference/point to the same place in memory.
The test should create an array, set every element to contain some value, and print every element. Any loops you write should use an iterator.
Explanation / Answer
#include <iostream>
#include <iterator> // std::iterator, std::input_iterator_tag
#include <assert.h>
using namespace std;
class staticArrayIterator : public std::iterator<std::input_iterator_tag, int>
{
int *p;
public:
staticArrayIterator (int* x) :p(x) {}
staticArrayIterator (const staticArrayIterator & mit) : p(mit.p) {}
staticArrayIterator & operator++() {++p;return *this;}
staticArrayIterator operator++(int) {staticArrayIterator tmp(*this); operator++(); return tmp;}
bool operator==(const staticArrayIterator & rhs) {return p==rhs.p;}
bool operator!=(const staticArrayIterator & rhs) {return p!=rhs.p;}
int& operator*() {return *p;}
};
template<class T>
class staticArray
{
private:
static const T MAX;
static T array[MAX];
public:
void setElement(int index,T data)
{
array[index] = data;
}
staticArrayIterator begin()
{
staticArrayIterator begin = new staticArrayIterator (array);
return begin;
}
staticArrayIterator end()
{
staticArrayIterator end = new staticArrayIterator (array+9);
return end;
}
};
template <class T>
T const staticArray<T> :: MAX = 10;
template <class T>
T staticArray<T> :: array[MAX] = {0};
int main()
{
staticArray<int> array;
array.setElement(0,11);
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.