我有一些有效的代码:
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如何填充矢量并获得它的大小.
我知道这将涉及制作一个全局指针,然后将其设置为指向一个内存块,在main中获取malloc或新的内容,我知道我将不得不更改"." 字符为" - >"但除此之外,我一直未能生成我的编译器将接受的内容.我特别不确定声明一个类数组的全局指针.
这基本上就是它的全部内容.你声明dummie dummie_type * dummie;然后你dummie = new dummie_type[size];在main中.不,你不需要改变.对->.