C++用一个新类初始化二维向量;默认值更改

c++ initialize 2d vector with a new class ; default value change

本文关键字:向量 二维 默认值 初始化 一个 C++ 新类      更新时间:2023-10-16

我想初始化一个 2d 向量,但不断收到错误消息

如果我写这段代码

unsigned long size = 101;
double initialmPo = 63;
std::vector<std::vector<Soil> > matrixPotential(
size, std::vector<Soil>(size));

我没有问题 但是如果我写这段代码

std::vector<std::vector<Soil> > matrixPotential(
size, std::vector<Soil>(size, initialmPo));

我收到的信息是

no matching constructor for initialization of  std::vector< Soil >

我想要一个 101*101 的向量,向量内部的值(数字(为 63。

这就是我的课 土壤

class Soil
{
public:
Soil();
double A;
double B;
double C;
double D;
};
#endif // SOIL_H

我该怎么办?

您的代码不起作用initialmPo因为Soil实例无效。您需要std::vector的构造函数是

explicit vector( size_type count,
const T& value = T(),
const Allocator& alloc = Allocator());     (until C++11)
vector( size_type count,    
const T& value,
const Allocator& alloc = Allocator());     (since C++11)

为此,您应该将所需的Soil元素作为第二个参数传递。在您的类中,您应该定义一个构造函数,该构造函数负责使用所需的值初始化字段。或者,您应该消除无参数构造函数并选择聚合初始化。

示例(带构造函数(

#include <vector>
class Soil
{
public:
double A;
double B;
double C;
double D;
Soil(double in) : A{in}, B{in}, C{in}, D{in} { }
};

int main()
{
unsigned long size = 101;
double initialmPo = 63;
Soil s(initialmPo);
std::vector<std::vector<Soil> > matrixPotential(
size, std::vector<Soil>(size, s));
return 0;
}

现场观看

示例(使用聚合初始化(

#include <vector>
class Soil
{
public:
double A;
double B;
double C;
double D;
};

int main()
{
unsigned long size = 101;
double initialmPo = 63;
Soil s{initialmPo, initialmPo, initialmPo, initialmPo};
std::vector<std::vector<Soil> > matrixPotential(
size, std::vector<Soil>(size, s));
return 0;
}

现场观看