可变长度的类数组

Mic*_*ick 1 c++

我有一些有效的代码:

class dummie_type
{
    public:
    int a;

    void do_stuff()
    {
        // blah
    }
};

class dummie_type dummie[10];

void main()
{
    subroutine();
}

void subroutine()
{
    dummie[3].a = 27; // etc...
    dummie[5].do_stuff();
}
Run Code Online (Sandbox Code Playgroud)

请注意,类的数组是全局的,我需要它保持这样(这是一个很长的故事).我需要更改此代码,以便类的数组具有可变长度.我知道这将涉及制作一个全局指针,然后将其设置为指向一个内存块,在main中获取malloc或新的内容,我知道我将不得不更改"." 字符为" - >"但除此之外,我一直未能生成我的编译器将接受的内容.我特别不确定声明一个类数组的全局指针.

编辑:对不起我之前应该说过,数组大小将在main()的开头附近计算一次,并且从那时起将保持不变.

Gle*_*len 11

你可以改变它,这是它的向量吗?

std::vector<dummie_type> dummie;

int main() {

    //populate();
    //showing alternative loop based approach
    populateWithLoop(calc_size());
    subroutine();
 }

void subroutine()
{
    dummie[3].a = 27; // etc...
    dummie[1].do_stuff();
}

void populate() {

   dummie_type a;
   dummie_type b;
   dummie_type c;

   dummie.push_back(a);
   dummie.push_back(b);
   dummie.push_back(c);

   //will print out 3
   std::cout << dummie.size() << std::endl;

   dummie_type d;
   dummie.push_back(d);

   //will print out 4
   std::cout << dummie.size() << std::endl;


}

populateWithLoop(int n) {

   for(int i=0; i<n; i++) {
       dummie_type temp;
       dummie.push_back(temp);
   }
}
Run Code Online (Sandbox Code Playgroud)

您可以将std :: vector视为一个数组,因此任何现有代码仍然可以继续工作.您可以获得可变长度数组的优势,而无需手动管理内存.

编辑:更新以显示Mick如何填充矢量并获得它的大小.


sep*_*p2k 5

我知道这将涉及制作一个全局指针,然后将其设置为指向一个内存块,在main中获取malloc或新的内容,我知道我将不得不更改"." 字符为" - >"但除此之外,我一直未能生成我的编译器将接受的内容.我特别不确定声明一个类数组的全局指针.

这基本上就是它的全部内容.你声明dummie dummie_type * dummie;然后你dummie = new dummie_type[size];在main中.不,你不需要改变.->.