我使用以下示例来说明我的问题:
std::vector<std::vector<int> > abc;
abc.push_back(std::vector<int>(9,0));
abc.push_back(std::vector<int>(9,2));
...
abc.push_back(std::vector<int>(9,20));
正如您在每次将矢量放入2D矢量时从示例中看到的那样,它的尺寸是相同的。变量abc
表示固定宽度的矩阵,其高度可根据要求增加或减少。因此,我想定义类似std::vector<std::vector(with fixed size)>
的内容。我该怎么做?
答案 0 :(得分:3)
由于矩阵的宽度在编译时是已知的,因此您可以使用std::array
s的向量:
std::vector<std::array<int,10>> matNby10;
现在矩阵的宽度由具有固定大小的数组控制。除此之外,只要您不尝试扩展行宽,它几乎是矢量矢量的直接替代品。
此外,这种方法很可能更适合缓存,因为数组会在向量中彼此相邻存储。
答案 1 :(得分:0)
如果你需要底层的std :: vector,你可以像这样写自定义包装器:
ng lint --type-check
你最终得到了这个:
template <typename T, int N>
struct vec
{
vec()
: _c {std::vector<T>(N)}
{
}
vec(int default_val)
: _c {std::vector<T>(N, default_val)}
{
}
T const& operator[](int index) const
{
return _c[index];
}
std::vector<T>& container() { return _c; }
private:
std::vector<T> _c;
};