Я пытаюсь создать класс объектов, называемых tableaux, которые по существу являются векторами векторов беззнаковых ints (они похожи на матрицы, за исключением строк могут быть разных длин) с некоторыми написанными мной алгоритмами. Основная проблема заключается в том, что я хочу наследовать итераторы для этих объектов из векторного класса, и я не знаю, как это сделать.Как «наследовать» итератор из класса STL?
Я прочитал несколько связанных вопросов и ответов, и мне очень легко просто наследовать std::vector<std::vector<unsigned int> >
, но консенсус в том, что это плохо из-за контейнеров STL, не имеющих виртуальных деструкторов или чего-то еще. Поэтому я решил попробовать и наследовать по композиции. Вот несколько -минимальный пример того, что я пытаюсь достичь:
#include <vector>
#include <iostream>
class tableau {
private:
std::vector<std::vector<unsigned int> > rep;
public:
using std::vector<std::vector<unsigned int> >::iterator;
void push_back(std::vector<unsigned int> const& new_row) {
rep.push_back(new_row);
}
};
int main() {
tableau t1;
std::vector<unsigned int> row1(10);
std::vector<unsigned int> row2(8);
t1.push_back(row1);
t1.push_back(row2);
tableau::iterator it = t1.begin();
for (; it != t1.end(); ++it) {
//display rows of tableau
}
return 0;
}
Но г ++ дает мне ошибку: тип «std::vector<std::vector<unsigned int> >
» не является базовым типа для типа «таблицы». Я только начинаю изучать C++, поэтому, пожалуйста, будьте осторожны, если я сделал что-то глупое. Если вы хотите получить больше фактического кода, который я написал, дайте мне знать.
В общем, это очень хороший TestCase. Отлично сработано. :) –