如何解决动态结构数组不允许使用 <std::vector>
对于我的编程项目的基础知识,我必须编写一个小应用程序,允许用户学习波兰语和英语的单词和短语。我项目的第一个函数将 100 个波兰语和英语单词加载到标准结构数组中。然后,对于负责我的应用程序的两种模式之一的功能(第一种是自由学习,另一种是测验),我想创建一个较小的动态结构数组,该数组将具有与用户输入一样多的元素,例如,如果您输入 10,此函数将创建一个 10 元素的动态结构数组。然后它会要求您翻译给定的单词/短语,直到您给出正确的答案。我被困在如何创建结构的动态数组上。出于一些难以想象的原因,我不允许使用非标准库(std::vector 和 std::array 被禁止)。到目前为止,这是我的代码
void WczytywanieWyrazen(Wyrazenie Polskie[100],Wyrazenie Angielskie[100])
{
int i = 0,j = 0;
fstream plik1("PolskieSlowka.txt",ios::in);
fstream plik2("AngielskieSlowka.txt",ios::in);
string Fraza;
string Phrase;
for (int i = 0; i < 100; i++)
{
Polskie[i].wartosc = 0;
Angielskie[i].wartosc = 0;
}
while (getline(plik1,Fraza))
{
Polskie[i].zwrot = Fraza;
i++;
}
while (getline(plik2,Phrase))
{
Angielskie[j].zwrot = Phrase;
j++;
}
plik1.close();
plik2.close();
}
void TrybNauki()
{
srand(time(NULL));
int m;
cout << "Please enter how many words would you like to practice (1-100): ";
cin >> m;
Wyrazenie* Fiszki = new Wyrazenie[m];
}
这些方法中哪一种是正确的? :
Wyrazenie* Fiszki[m];
for (int i = 0; i < 100; i++)
{
Fiszki[i] = new Wyrazenie;
}
/////////////////////
Wyrazenie* Fiszki = new Wyrazenie[m];
解决方法
在 C++ 中以传统方式创建动态分配的结构数组的正确答案如下所示:
struct Structure{
int x;
int y;
};
//...
cin >> m;
Structure* MyStruct[m] = new Structure; // creates an array of pointers type struct
for(int i = 0; i < SomeValue; ++i)
MyStruct[i].x = Value;
//or you could make a structure like that
for(int i = 0; i < SomeValue; ++i){
Structure _Var;
_Var.x = Value;
_Var.y = Some other value;
Mystruct[i] = _Var;
}
//Never forget to free up the memory!
delete[] MyStruct;
//Now,if for some reason you need to have a 2D array created dynamically the //"traditional" way,it would look something like this
Structure** MyStruct = new Structure* [m];// Creates an array of pointers to arrays of pointers
for(int i = 0; i<SomeValue ++i)
MyStruct[i] = new Structure;
//Now freeing up the memory looks something like this
for(int i = 0; i<SomeValue ++i){
delete MyStruct[i];
MyStruct[i] = NULL;
}
delete[] MyStruct;
MyStruct = NULL;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。