如何使用初始化列表 C++ 将元素放入嵌套向量中
How do I get elements into a nested vector with an initializer list c++
我有一个矩阵 class,它在一个向量中包含一个向量作为其中的数据。我希望能够通过初始化列表插入元素。
这方面的一个例子如下:
#include <vector>
int main(void) {
std::vector<std::vector<int>> v = {
{ 1, 2, 3, 4, 5 },
{ 6, 7, 8, 9, 10 }
};
}
还应注意,我在 Matrix class 中使用的向量是我编写的自定义向量 class。我找到了一种使用初始化列表向向量添加元素的方法,但我不知道如何对嵌套的初始化列表执行相同的操作,因为初始化列表不提供下标。
我知道外部初始化列表的大小(在上面的例子中是两个),但我不知道如何获得第二个初始化列表的大小。
到目前为止,这是我的代码片段。
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 class 如何接收可能无限量的初始化列表并将它们分类?
I would like to be able to insert elements through initializer lists. ...I know the size of the outer initializer list (in the above example it is two), but I don't know how to get the size of the second initializer list.
也许我误解了您的意思,但下面的代码片段应该可以帮助您入门。根据 clang++,它打印外部和内部初始化列表的大小以及元素,并且在 C++11 中编译和运行良好。
// ...
Matrix(const std::initializer_list<const std::initializer_list<type>> & init_list) {
cout << "vector of " << init_list.size() << " vectors" << endl;
for (const auto & inner_list : init_list) {
cout << inner_list.size() << " elements: " << endl;
for (const auto & m : inner_list) {
cout << m << ",";
}
cout << endl;
}
}
// ...
Matrix<int> M { { 1, 2 }, { -1, 2 } };
Moreover, how does the std::vector class take in a potentially infinite amount of initializer lists and sort them out?
我不确定我明白你在这里的意思。如果我理解这个问题,那么我认为上面的代码片段可以回答它。如果我不这样做,请在评论中详细说明,我可以尝试解决它。
我有一个矩阵 class,它在一个向量中包含一个向量作为其中的数据。我希望能够通过初始化列表插入元素。
这方面的一个例子如下:
#include <vector>
int main(void) {
std::vector<std::vector<int>> v = {
{ 1, 2, 3, 4, 5 },
{ 6, 7, 8, 9, 10 }
};
}
还应注意,我在 Matrix class 中使用的向量是我编写的自定义向量 class。我找到了一种使用初始化列表向向量添加元素的方法,但我不知道如何对嵌套的初始化列表执行相同的操作,因为初始化列表不提供下标。
我知道外部初始化列表的大小(在上面的例子中是两个),但我不知道如何获得第二个初始化列表的大小。
到目前为止,这是我的代码片段。
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 class 如何接收可能无限量的初始化列表并将它们分类?
I would like to be able to insert elements through initializer lists. ...I know the size of the outer initializer list (in the above example it is two), but I don't know how to get the size of the second initializer list.
也许我误解了您的意思,但下面的代码片段应该可以帮助您入门。根据 clang++,它打印外部和内部初始化列表的大小以及元素,并且在 C++11 中编译和运行良好。
// ...
Matrix(const std::initializer_list<const std::initializer_list<type>> & init_list) {
cout << "vector of " << init_list.size() << " vectors" << endl;
for (const auto & inner_list : init_list) {
cout << inner_list.size() << " elements: " << endl;
for (const auto & m : inner_list) {
cout << m << ",";
}
cout << endl;
}
}
// ...
Matrix<int> M { { 1, 2 }, { -1, 2 } };
Moreover, how does the std::vector class take in a potentially infinite amount of initializer lists and sort them out?
我不确定我明白你在这里的意思。如果我理解这个问题,那么我认为上面的代码片段可以回答它。如果我不这样做,请在评论中详细说明,我可以尝试解决它。