Есть задание, написать шаблонный класс контейнер, в котором данные должны храниться в виде одной из STL коллекций. Я выбрал хранить их в std::vector.
Мне нужно написать свой двунаправленный итератор, в котором будет перегружен оператор инкремента (++), так, чтобы итератор пробегался по вектору и брал каждый третий элемент. Проблема заключается в том, что как бы я не пробовал его написать, ничего не получается с моим уже написанным классом.
Там у меня есть метод printEachThirdElement, который как раз занимается выводом каждого третьего элемента вектора, но это нужно реализовать как свой итератор. Прошу помощи.
Код шаблонного класса
#include <iostream>
#include <vector>
#include <algorithm>
template <typename T>
class MyVector {
public:
MyVector() : vector() {
}
MyVector(const T& value) : vector() {
vector.push_back(value);
}
void info() const {
std::cout << "[ ";
for (auto &v : vector) {
std::cout << v << " ";
}
std::cout << "]" << std::endl;
}
std::int32_t size() const {
return vector.size();
}
void addElement(const T& value) {
vector.push_back(value);
}
void removeElements(const T& value) {
vector.erase(std::remove(vector.begin(), vector.end(), value), vector.end());
}
void printEachThirdElement() const {
for (auto i = vector.begin() + 2; i < vector.end(); i+=3) {
std::cout << *i << " ";
}
std::cout << std::endl;
}
private:
std::vector<T> vector;
};
Код функции main()
int main() {
MyVector<int> vInt;
vInt.addElement(5);
vInt.addElement(6);
vInt.addElement(7);
vInt.addElement(5);
vInt.addElement(15);
vInt.addElement(12);
vInt.addElement(5);
vInt.addElement(51);
vInt.addElement(666);
vInt.addElement(5);
vInt.addElement(15);
vInt.addElement(12);
vInt.addElement(5);
vInt.addElement(51);
vInt.addElement(666);
std::cout << "Each 3 element" << std::endl;
vInt.printEachThirdElement();
return 0;
}