0

次のようなコードがあります。

class A{

public: 
A();

private:
vector<vector<int> > mat;
int a;

}

デフォルトのコンストラクタはどのように見えるべきですか?このように?

A::A(): mat(10(10)),a(0){};

しかし、もう1つ問題があります..「行」の数がわかりません。( vector<vector<int> >n個の要素がvector<int>必要で、4個の要素が必要です)また、の要素へのアクセスに問題がありvector<vector<int> >ます。では、やり方を教えていただけますか?ありがとう。:)

4

2 に答える 2

5

このリファレンス ページの (2) のコンストラクタを使用します。

A::A() : mat(10, std::vector<int>(10)), a(0) { }

もちろん、変数を渡すこともできます。例えば:

A::A(size_t n_rows, size_t n_cols) : mat(n_rows, std::vector<int>(n_cols)), a(0) {}

要素にアクセスするには、次の 2 つの連続した呼び出しを使用しますoperator[]

std::cout << mat[1][1];  // will print 0, as vector's elements are default initialized

最初の呼び出しは への参照を返しvector<int>、2 番目の呼び出しは への参照を返しますint

于 2012-08-15T17:22:47.750 に答える
1

行数を取るコンストラクターを追加できます。

A(unsigned int rows): mat(rows, std::vector<int>(4)), a(0) {};

要素にアクセスするために、いくつかのアクセス演算子またはメソッドを追加できます。例えば

class A{

public: 
 public:
 A(unsigned int rows): mat(rows, std::vector<int>(4)), a(0) {};
 const int& operator()(unsigned int row, unsigned int col) const {
   return mat[row][col];
 }
 private:
vector<vector<int> > mat;
int a;

};

それで

A a;
int i = a(3,4);

アクセス演算子に範囲チェックを追加したい場合があります。

于 2012-08-15T17:27:21.277 に答える