在 C++ 中将成员添加到 std::vector<std::vector<int>> 类

Adding a member to std::vector<std::vector<int>> class in C++

本文关键字:vector gt lt std int C++ 添加 成员      更新时间:2024-05-09

我必须修改一个代码,以便向2D向量添加一个成员。代码以typedef vector<vector<int>> Matrix开始,我用Matrix类替换了它。我尝试使用从vector<vector<int>>继承

class Matrix: public vector<vector<int>> {
public:
int myMember;
};

通过这种方式,我实际上不必对源代码进行太多修改。但是,如果我尝试运行:

Matrix mymatrix (4);

它引发了一个错误:

modele.cpp:19:20: error: no matching function for call to 'Matrix::Matrix(int)'
Matrix mymatrix (4);
^
In file included from modele.cpp:8:0:
modele.h:6:7: note: candidate: Matrix::Matrix()
class Matrix: public vector<vector<int>> {
^
modele.h:6:7: note:   candidate expects 0 arguments, 1 provided

构造函数默认情况下不会继承,但可以在派生类中使用它们,为此您必须执行以下操作:

#include <vector>
#include <iostream>
class Matrix : public std::vector<std::vector<int>>{
public:
using vector::vector;
int myMember;
};
int main(){
Matrix data(1);
std::vector row = {1,2,3,4,5};
data.push_back(row);

for(auto i: data){
for(auto r : i){
std::cout << r << std::endl;
}
}
}

通过这种方式,编译器将知道基类中的所有构造函数。并将为派生类调用适当的构造函数。