Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 创建类数组_C++_Arrays_Class_Class Design - Fatal编程技术网

C++ 创建类数组

C++ 创建类数组,c++,arrays,class,class-design,C++,Arrays,Class,Class Design,我上过这样的课: class me362 { public: void geometry(long double xLength); void mesh(int xNode); void properties(long double H, long double D, long double K,long double Q, long double DT,long double PHO,long double CP, long double TINF); void

我上过这样的课:

class me362
{
public:
    void geometry(long double xLength);
    void mesh(int xNode);
    void properties(long double H, long double D, long double K,long double Q, long double DT,long double PHO,long double CP, long double TINF);
    void drichlet(long double TLeft,long double TRight);
    void neumann(bool Tlinks, bool Trechts);
    void updateDiscretization(long double**** A,long double* b, long double* Tp);
    void printVectorToFile(long double *x);
private:
    int xdim;
    long double xlength;
    long double tleft;
    long double tright;
    long double h;
    long double d;
    long double k;
    long double q;
    long double dt;
    long double cp;
    long double rho;
    long double Tinf;
    bool tlinks;
    bool trechts;
};
我使用

me362 domain1;
me362 domain2;
me362 domain3;
但是我想确定要初始化的域的数量。所以我需要一个me362结构的动态数组。我该怎么做?能做到吗

谢谢大家,


Emre.

对于初学者,欢迎来到
STL(标准模板库)
的世界

在本例中,您可以使用
std::vector
,因为它可以为您保存可变数量的元素

#include<vector>
using namespace std;

//Create a std::vector object with zero size
vector<me362> myVector;

//Insert new items
myVector.push_back(domain1);
myVector.push_back(domain2);
myVector.push_back(domain3);

//Get the size of the vector, i.e., number of elements in vector
myVector.size();
#包括
使用名称空间std;
//创建大小为零的std::vector对象
向量myVector;
//插入新项目
myVector.push_back(域1);
myVector.push_back(域2);
myVector.push_back(域3);
//获取向量的大小,即向量中的元素数
myVector.size();
此外,您可以创建这样的向量对象

//nMe362: number of elements in vector, me362Obj: init value of each me362 object
vector<me362> myVector(nMe362, me362Obj);
//nMe362:向量中的元素数,me362Obj:每个me362对象的初始值
载体myVector(nMe362,me362Obj);

对于初学者,欢迎来到
STL(标准模板库)
的世界

在本例中,您可以使用
std::vector
,因为它可以为您保存可变数量的元素

#include<vector>
using namespace std;

//Create a std::vector object with zero size
vector<me362> myVector;

//Insert new items
myVector.push_back(domain1);
myVector.push_back(domain2);
myVector.push_back(domain3);

//Get the size of the vector, i.e., number of elements in vector
myVector.size();
#包括
使用名称空间std;
//创建大小为零的std::vector对象
向量myVector;
//插入新项目
myVector.push_back(域1);
myVector.push_back(域2);
myVector.push_back(域3);
//获取向量的大小,即向量中的元素数
myVector.size();
此外,您可以创建这样的向量对象

//nMe362: number of elements in vector, me362Obj: init value of each me362 object
vector<me362> myVector(nMe362, me362Obj);
//nMe362:向量中的元素数,me362Obj:每个me362对象的初始值
载体myVector(nMe362,me362Obj);

使用std::vector,它为您处理动态内存:

#include <vector>

// ...

std::vector<me362> domains;
#包括
// ...
std::向量域;
vector也有很多很好的特性和保证,比如布局与C兼容,具有引用的局部性,每个元素零开销,等等

还要注意的是,std::vector有一个构造函数,它接受一个整型参数,并创建许多元素:

// Will create a vector with 42 default-constructed me362 elements in it
std::vector<me362> domains(42);
//将创建一个包含42个默认构造me362元素的向量
std::向量域(42);

有关使用std::vector的详细信息,请参阅任何标准库参考(如或)。

使用std::vector,它为您处理动态内存:

#include <vector>

// ...

std::vector<me362> domains;
#包括
// ...
std::向量域;
vector也有很多很好的特性和保证,比如布局与C兼容,具有引用的局部性,每个元素零开销,等等

还要注意的是,std::vector有一个构造函数,它接受一个整型参数,并创建许多元素:

// Will create a vector with 42 default-constructed me362 elements in it
std::vector<me362> domains(42);
//将创建一个包含42个默认构造me362元素的向量
std::向量域(42);
有关使用std::vector的详细信息,请参阅任何标准库参考(如或)。

是的,可以这样做。改为使用,在每次推回操作中动态增加其大小

std::vector<me362> obj ;

for( int i = 0; i < numberOfInstancesRequired; ++i )
{
    obj.push_back( me362() ) ;
}
std::vector obj;
对于(int i=0;i
是的,可以这样做。改为使用,在每次推回操作中动态增加其大小

std::vector<me362> obj ;

for( int i = 0; i < numberOfInstancesRequired; ++i )
{
    obj.push_back( me362() ) ;
}
std::vector obj;
对于(int i=0;i
我知道上面的代码只是一个示例,但是在这个实例数量已知的特定示例中,调用
obj.reserve(numberOfInstancesRequired)将更加有效就在循环之前。@adl我实际上希望用户输入实例数。所以这是未知的。但无论如何,谢谢您只需使用
std::vector myArray(numberOfInstancesRequired,me362())。这既可以保留大小,也可以创建这么多的对象,而无需执行
推回
循环。@Emre:此值不需要是编译时已知的常量。如果用户给出一个值,您现在可以在运行时调用该值,您可以调用reserve()或使用KillianDS的语法。我知道上面的代码只是一个示例,但在这个已知实例数的特定示例中,调用
obj.reserve(numberOfInstancesRequired)将更加有效就在循环之前。@adl我实际上希望用户输入实例数。所以这是未知的。但无论如何,谢谢您只需使用
std::vector myArray(numberOfInstancesRequired,me362())。这既可以保留大小,也可以创建这么多的对象,而无需执行
推回
循环。@Emre:此值不需要是编译时已知的常量。如果用户给出一个值,那么现在在运行时可以调用这个值,也可以调用C++()或使用KiLiSand的语法。这是给Objective-C的。@Mahesh-我删除了标签,谢谢。@Alexandre C-是的,但我必须=)这是为了实现耦合偏微分方程离散化。需要处理非常大的数组..什么代码> NSARSUCT/<代码>标签与C++有什么关系?这是给Objective-C的。@Mahesh-我删除了标签,谢谢。@Alexandre C-是的,但我必须=)这是为了实现耦合偏微分方程离散化。需要处理非常大的阵列。谢谢,我将使用上面描述的Mahesh循环来“推回”它们。谢谢,我将使用上面描述的Mahesh循环来“推回”它们。谢谢。我将使用std::vector和一个循环来实现这一点。谢谢。我将使用std::vector和一个循环来实现这一点。