gpt4 book ai didi

c++ - 类的可变长度数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:26 25 4
gpt4 key购买 nike

我有一些有效的代码:

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();
}

请注意,类数组是全局的,我需要它保持这样(说来话长)。我需要更改此代码,以便类数组的长度可变。我知道这将涉及制作一个全局指针,然后将其设置为指向在 main 中进行 malloc 或 new 的内存块,我知道我将不得不更改“。”字符到“->”,但除此之外,我总是无法生成我的编译器会接受的东西。我特别不确定声明一个指向类数组的全局指针。

编辑:抱歉,我应该早点说,数组大小将在 main() 开始附近计算一次,并且从那时起将保持不变。

最佳答案

你能把它改成 vector 吗?

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);
}
}

您可以像对待数组一样对待 std::vector,因此任何现有代码仍将继续工作。您可以获得可变长度数组的优势,而没有必须手动管理内存的缺点。

编辑:已更新以向 Mick 展示如何填充 vector 并获取其大小。

关于c++ - 类的可变长度数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1454843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com