【发布时间】:2021-06-02 00:32:12
【问题描述】:
我有一个 Matrix 类,它在向量中包含一个向量作为其中的数据。我希望能够通过初始化列表插入元素。
一个例子如下:
#include <vector>
int main(void) {
std::vector<std::vector<int>> v = {
{ 1, 2, 3, 4, 5 },
{ 6, 7, 8, 9, 10 }
};
}
还应注意,我在 Matrix 类中使用的向量是我编写的自定义向量类。我找到了一种使用初始化列表向向量添加元素的方法,但我不知道如何对嵌套初始化列表执行相同操作,因为初始化列表不提供下标。
我知道外部初始化列表的大小(在上面的示例中是两个),但我不知道如何获取第二个初始化列表的大小。
到目前为止,这是我的代码的 sn-p。
Matrix.h
template<class type>
class Matrix {
private:
Vector<Vector<type>> data;
public:
Matrix() {}
Matrix(std::initializer_list<std::initializer_list<type>> init_list) {
/* Get the data */
}
}
此外,std::vector 类如何接收可能无限量的初始化列表并对其进行排序?
【问题讨论】:
-
考虑一种不同的方法 - 让您的
Vector支持将std::initializer<T>作为输入,然后让您的Matrix将Vector<Vector<T>>作为输入并复制/移动它,不要'根本不需要std::initializer_list。 -
旁注:
vector的基于vector的矩阵往往很慢,因为vector保证连续(因此缓存友好)数据,vector的vectors可能会溅到整个存储空间(因此对缓存不友好)。您通常会看到列数较少的矩阵的效果。 -
你那行写着
std::vector<std::vector<int>> = {的行实际上并没有创建一个变量,因为没有变量名。 -
考虑展平向量。您将获得更好的性能,高于 2 或 3 的高阶维度会使代码更难理解,因为多维数组难以可视化。
标签: c++ initializer-list