2012-08-15 89 views
0

我有一些像這樣的代碼:的std ::向量和構造

class A{ 

public: 
A(); 

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

} 

如何默認的構造函數應該像這樣?

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

但對我來說多了一個問題..我不知道「行」的數量。 (vector<vector<int> >應該有n個元素,並且vector<int>應該有4個元素) 而且我還有訪問vector<vector<int> >元素的問題。那麼你能告訴我該怎麼辦?謝謝。:)

回答

5

使用情況下(2)this reference page:

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) {} 

要訪問的元素,您使用兩個succesive調用operator[]

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

首先調用返回到vector<int>的引用,第二個到int參考。

+0

謝謝... :)我是否需要初始化mat?或者我可以離開它嗎?什麼更好? – scarably 2012-08-15 18:02:23

+0

元素在構造函數中初始化爲0。如果這在你的程序中是有意義的,那顯然是這樣。 – jrok 2012-08-15 18:43:52

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); 

您可能要增加一些檢查範圍與接入運營商。