0
typedef map<int, double> SparseRow;
template <int N> struct SparseMatrix
{
map<int, SparseRow> data;
};


const int N = 5;
SparseMatrix<N> sparseMat;

我对这里如何使用模板类型 N 感到困惑?谁能解释为什么它使这张地图固定大小?

////////////////////////////////

编辑

这是一个打印函数和对它的调用

print(sparseMat);

    template <int N>
void print(SparseMatrix<N>& sm)
{
SparseRow sr;
SparseRow::const iterator it;
for (int row = 0; row < N; row++)
{
SparseRow sr = sm.data[row];
// Now iterate over row
for (it = sm.data[row].begin(); it != sm.data[row].end();
it++)
{
cout << (*it).second << ", ";
}
cout << endl;
}
}

如果值 N 不在函数调用中,它如何传递给函数?我对 SparseMatrix 的实例如何保存像假设 5 这样的值感到困惑?

4

1 回答 1

2

谁能解释为什么它使这张地图固定大小?

它没有——标准库中没有固定大小的地图。非类型模板参数N实际上并未在您向我们展示的模板中使用。可以想象,它可以用来确保地图永远不会增长超过 5 个元素,但是将其作为模板参数并没有直接的好处,它也可以是一个普通变量。

添加的代码中(编辑后),您可以看到它N被用作内部映射的大小——显然,只有在每个row矩阵之前都已正确初始化时才有效。但同样,这段代码中没有任何内容表明作者为什么选择将大小作为模板参数而不是数据成员。

于 2013-07-04T11:58:00.090 回答