选择矢量矢量的大小

时间:2010-05-09 18:22:01

标签: c++

我有一个名为Grid的类,它声明了这样的向量向量:

typedef vector<int> row;
typedef vector<row> myMatrix;

myMatrix sudoku_;

构造函数如下所示:

grid::grid() : sudoku_(9,9)
{

}

如您所见,构造函数正在将其初始化为9x9网格。如何让它工作,以便要求用户输入一个数字,比如n,并且网格初始化为n x n?

3 个答案:

答案 0 :(得分:6)

vector有一个构造函数,允许您使用给定值的副本将其初始化为特定大小:

grid::grid(size_t w, size_t h) : sudoku_(w, row(h)) {}

答案 1 :(得分:1)

如果可以,请不要使用矢量。 请改用http://www.boost.org/doc/libs/1_42_0/libs/multi_array/doc/user.html

答案 2 :(得分:1)

@gf对这个问题有绝对正确的答案,但我在这里质疑向量的使用(对我来说很少见)。在数独网格的情况下,结构是固定大小的,因此您不能通过简单的动态分配来获胜。通过使用9个向量的向量,您有10个填充的向量对象。其中每个都至少有一个动态分配,所以十个调用new。最重要的是,关于std :: vector的实现我最熟悉的对象是12个字节(3个32位指针),加上堆分配开销。处理一个可以在不到100个字节内轻松表示的结构的所有这些都是过度的。