Создание массива классов - PullRequest
0 голосов
/ 30 апреля 2011

У меня есть такой класс, как:

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. Как я могу это сделать? Можно ли это сделать?

Спасибо всем,

Эмре.

Ответы [ 3 ]

3 голосов
/ 30 апреля 2011

Да, это можно сделать.Вместо этого используйте std :: vector , что динамически увеличивает его размер при каждой операции push_back.

std::vector<me362> obj ;

for( int i = 0; i < numberOfInstancesRequired; ++i )
{
    obj.push_back( me362() ) ;
}
1 голос
/ 30 апреля 2011

Используйте 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);

См. Любую стандартную библиотечную ссылку (например, cppreference.com или cplusplus.com ) для получения подробной информации об использовании std :: vector.)

1 голос
/ 30 апреля 2011

Для начала, добро пожаловать в мир STL(standard template library)!

В вашем случае вы можете использовать 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();

Кроме того, вы можете создать векторный объект следующим образом.

//nMe362: number of elements in vector, me362Obj: init value of each me362 object
vector<me362> myVector(nMe362, me362Obj);
...