2012-08-15 84 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); 

您可能要增加一些检查范围与接入运营商。