C++ 动态异形体 2D 数组

c++ dynamic allocatinon 2d array

本文关键字:2D 数组 异形 动态 C++      更新时间:2023-10-16

我想做一个动态分配的二维数组,但我真的不知道该怎么做。我已经搜索了谷歌和所有内容,但就是无法让它工作。到目前为止,我的代码是:

postaH.h:

#ifndef POSTAHH
#define POSTAHH
#include <vector>
#include <string>
#include <iostream>
#include "feladoH.h"
using namespace std;
class postaH : public feladoH{
  private:
          int szertekek[7];
          string szovegek[7];
          int a,b;
          int** szamosszesit;
          string d,c;
          string** szovosszesit;
  public:
         postaH();
         postaH(int szertekek[7], string szovegek[7],int,int,string,string);
         ~postaH();
         postaH(postaH& pos);
         int getSzertek();
         string getSzovegek();
         void setSzertek(int ir,int hsz,int szulev, int cir, int chsz,int surg, int suly);
         void setSzovegek(string nev,string varos,string utca,string cnev,string cvaros,string cutca,string cstipus);
         void hozzaad();
         void fajlbakiir();
};
#endif

postaS.cpp:

#include <string>
#include <iostream>
#include <fstream>
#include "postaH.h"
int seged = 0;
using namespace std;
postaH::postaH(){
          int szertekek[7];
          string szovegek[7];     
          int** szamosszesit;
          string** szovosszesit;
   }
postaH::postaH(int szertekek[7], string szovegek[7],int aa,int bb,string dd,string cc)     : a(aa),b(bb),d(dd),c(cc){
   this->szertekek[7] = szertekek[7];
   this->szovegek[7] = szovegek[7];
    szamosszesit = new int*[a];
for (int i = 0; i<a; i++){
        szamosszesit[i] = new int[b];
    }
    for (int i = 0; i<a; i++){
    for (int j = 0; j<b; j++){
        szamosszesit[i][j] = 0;
    }
szovosszesit = new string*[d];
for (int i = 0; i<d; i++){
    szovosszesit[i] = new string[d];
}
for (int i = 0; i<d; i++){
    for (int j = 0; j<c; j++){
        szovosszesit[i][j] = 0;
        }
}
postaH::~postaH(){
              delete [] szertekek;
              delete [] szovegek;
              for (int i = 0; i<a; i++){
                  delete [] szamosszesit[i];
                    } 
                    delete [] szamosszesit;
            for (int i = 0; i<d; i++){
                  delete [] szovosszesit[i];
                    } 
                        delete [] szovosszesit;
}
postaH::postaH(postaH& pos){
   this->szertekek[7] = pos.getSzertek();
   this->szovegek[7] = pos.getSzovegek(); 
    }
int postaH::getSzertek(){
return szertekek[7];
}
std::string postaH::getSzovegek(){
return szovegek[7];        
}
void postaH::setSzertek(int ir,int hsz,int szulev, int cir, int chsz,int surg, int suly){
 this->szertekek[0] = ir;
 this->szertekek[1] = hsz;
 this->szertekek[2] = szulev;
 this->szertekek[3] = cir;
 this->szertekek[4] = chsz;
 this->szertekek[5] = surg;
 this->szertekek[6] = suly;
}
void postaH::setSzovegek(string nev,string varos,string utca,string cnev,string cvaros,string cutca,string cstipus){
 this->szovegek[0] = nev;
 this->szovegek[1] = varos;
 this->szovegek[2] = utca;
 this->szovegek[3] = cnev;
 this->szovegek[4] = cvaros;
 this->szovegek[5] = cutca;
 this->szovegek[6] = cstipus;
}
void postaH::hozzaad(){
}
void postaH::fajlbakiir(){
 ofstream kezb;
 kezb.open ("kezbesitett.txt", ios::app);
 for( int i=0;i<7;i++){
      kezb << szovegek[i] << ",";
      kezb << szertekek[i] << ",";
      }
 kezb << "n";
 kezb.close();
}

所以我的问题基本上是我应该如何在头文件中进行声明,以及 cpp 文件中的构造函数、析构函数才能工作?

通常,

如果要创建数组,最好使用适合该任务的容器:

  • std::vector项的顺序容器。
  • std::deque需要从任一端更新的项目的顺序容器。
  • std::list将从序列中的任何点更新的顺序容器。