私は書いたいくつかのアルゴリズムで、本質的に符号なし整数のベクトルのベクトルであるtableauxというオブジェクトのクラスを作成しようとしています(行列以外の行列は異なる長さです)。主な問題は、これらのオブジェクトのイテレータをベクタークラスから継承したいと思っていることです。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;
}
しかし、その後、G ++私にエラーを与える:ここで私が達成しようとしているものの多少、最小限の例である型「std::vector<std::vector<unsigned int> >
は、」タイプ「タブロー」の基本型ではありません。私はちょうどC++を学び始めているので、何か愚かなことをしたら穏やかにしてください。私が書いた実際のコードをもっと欲しければ、教えてください。
一般的に、これは非常に良いテストケースです。よくやった。 :) –