我对std :: fill
有一个简单的问题。
首先,我定义了一对二维数组。
const int NMAX = 13;
typedef pair<int, set<int>> solution;
solution memo[NMAX][NMAX];
我假设在那个阶段我的数组是用默认的对构造函数初始化的。然后,我想初始化这个数组而不依赖于嵌套循环。我在做的是:
solution s;
s.first = -1;
std::fill( &memo[0][0], &memo[0][0] + sizeof(memo), s);
但我得到一个公共汽车错误......我做错了什么?
答案 0 :(得分:2)
您的结束指针错误,您的意思是:
std::fill(&memo[0][0], &memo[0][0] + sizeof(memo) / sizeof (solution), s);
sizeof(memo)
为NMAX * NMAX * sizeof (solution)
。
答案 1 :(得分:1)
实际上,我们可以使用std::vector
轻松完成所有这些工作:
typedef pair<int, set<int>> solution;
solution s;
s.first = -1;
std::vector<std::vector<solution>> memo(NMAX, std::vector<solution>(NMAX, s));
除非你对使用std::vector
有一些限制,否则使用它会更容易,而不是做一堆指针数学。
修改:使用std::array
也不是最糟糕的主意,例如πάντα ῥεῖ建议。您可以避免编写内部循环以使用std::for_each
自行执行填充,如下所示:
std::array<std::array<solution, NMAX>, NMAX> memo;
solution s;
s.first = -1;
std::for_each(std::begin(memo), std::end(memo), [&s](std::array<solution,NMAX>& next){next.fill(s);})
编辑2:如果你真的是受虐狂并希望自己计算[row] [column]指数,那么你可以使用单std::array<solution, NMAX*NMAX>
并利用{{1和} std::begin()
调用std::end()
:
std::fill