在 C++ 中向 std::vector<std::vector<int>> class 添加成员
Adding a member to std::vector<std::vector<int>> class in C++
我必须修改代码才能将成员添加到 2D 向量。
代码以 typedef vector<vector<int>> Matrix
开头,我将其替换为矩阵 class。
我尝试使用 :
从 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
默认情况下不继承构造函数,但可以在派生的 class 中使用它们,因为你必须这样做:
#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;
}
}
}
这样编译器就会知道基础class中的所有构造函数。并将为您派生的 class.
调用适当的构造函数
我必须修改代码才能将成员添加到 2D 向量。
代码以 typedef vector<vector<int>> Matrix
开头,我将其替换为矩阵 class。
我尝试使用 :
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
默认情况下不继承构造函数,但可以在派生的 class 中使用它们,因为你必须这样做:
#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;
}
}
}
这样编译器就会知道基础class中的所有构造函数。并将为您派生的 class.
调用适当的构造函数