Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于输入文件的大小未知的数组 这是一个初学者C++作业问题,我知道向量,但不允许在这个项目中使用。我四处搜索,找到了如何制作大小未知的数组[]。但它有点像涓涓细流。我读到的示例都是这样的:获取一个输入,然后基于该输入创建数组(大小n)_C++_Arrays_Size - Fatal编程技术网

基于输入文件的大小未知的数组 这是一个初学者C++作业问题,我知道向量,但不允许在这个项目中使用。我四处搜索,找到了如何制作大小未知的数组[]。但它有点像涓涓细流。我读到的示例都是这样的:获取一个输入,然后基于该输入创建数组(大小n)

基于输入文件的大小未知的数组 这是一个初学者C++作业问题,我知道向量,但不允许在这个项目中使用。我四处搜索,找到了如何制作大小未知的数组[]。但它有点像涓涓细流。我读到的示例都是这样的:获取一个输入,然后基于该输入创建数组(大小n),c++,arrays,size,C++,Arrays,Size,我已经创建了这个学生类,但是现在我需要一个数组来存储它们。我事先不知道会有多少学生。我只有一个文本文件的输入,每个学生在一行上。格式如下,样本大约是5个,但我不知道老师会用多少来测试我的程序 如下所示的输入文件: George Chan Computer_Science New York 23 Johnny Chan Computer_Science New Jersery 22 .... int n_students = 0; Student* students = readStudents

我已经创建了这个学生类,但是现在我需要一个
数组来存储它们。我事先不知道会有多少学生。我只有一个文本文件的输入,每个学生在一行上。格式如下,样本大约是5个,但我不知道老师会用多少来测试我的程序

如下所示的输入文件:

George Chan Computer_Science New York 23
Johnny Chan Computer_Science New Jersery 22
....
int n_students = 0;
Student* students = readStudents(infile,n_students);
但问题是我不知道有多少学生在那里,直到我读完整个文本(或者我不知道是否有其他的方法)。我目前的方法是逐行阅读,增加一个计数器
studentCounter
,直到我完成,然后创建我的
Student*myfloster=Student[studentCounter]
。但是当我必须再次开始读取文件时。然后逐行解析信息,创建一个
Student
对象,让
myfloster[x]
指向它。我觉得我在做两次工作,只是为了有合适的尺寸。有没有我错过的一些技巧或东西


谢谢。

如果你有足够的雄心壮志,你可以做与
vector
大致相同的事情——分配一些空间,跟踪你正在使用的空间,当/如果空间满了,分配一个更大的块(大约1/2或2倍大),将数据从上一个块复制到新块,然后开始将新数据插入新块。必要时重复。

如果你有足够的雄心壮志,你可以做与
vector
大致相同的事情——分配一些空间,跟踪你正在使用的空间的多少,当/如果空间满了,分配一个更大的块(大约1/2或2倍大),将数据从上一个块复制到新块,然后开始将新数据插入新块。必要时重复。

输入文件是您定义的还是为练习定义的

如果要定义文件的结构,有两种选择。你也可以

a) 将字段设置为dixed length,然后仅获取文件大小作为开始,并进行除法以获取项目数


b) 第一行存储文件中的项目数。

输入文件是您定义的还是为练习定义的

如果要定义文件的结构,有两种选择。你也可以

a) 将字段设置为dixed length,然后仅获取文件大小作为开始,并进行除法以获取项目数


b) 第一行存储文件中的项目数。

这里有一个使用递归的简单方法:

Student* readStudents(istream& infile,int& n_students)
{
  string line = readLine(infile);
  if (!infile) {
    return new Student[n_students];
  }
  int index = n_students++;
  Student* students = readStudents(infile,n_students);
  students[index] = parseLine(line);
  return students;
}
然后你这样称呼它:

George Chan Computer_Science New York 23
Johnny Chan Computer_Science New Jersery 22
....
int n_students = 0;
Student* students = readStudents(infile,n_students);

这样做的目的只是在深入递归时阅读这些行。当您到达文件的末尾时,您知道要分配多少学生,然后您可以解析行并在退出递归时以相反的顺序填充数组。您还将获得通过输出参数返回的学生计数。

这里有一个使用递归的简单方法:

Student* readStudents(istream& infile,int& n_students)
{
  string line = readLine(infile);
  if (!infile) {
    return new Student[n_students];
  }
  int index = n_students++;
  Student* students = readStudents(infile,n_students);
  students[index] = parseLine(line);
  return students;
}
然后你这样称呼它:

George Chan Computer_Science New York 23
Johnny Chan Computer_Science New Jersery 22
....
int n_students = 0;
Student* students = readStudents(infile,n_students);

这样做的目的只是在深入递归时阅读这些行。当您到达文件的末尾时,您知道要分配多少学生,然后您可以解析行并在退出递归时以相反的顺序填充数组。您还将获得通过输出参数返回的学生计数。

我想您也不能使用std::list。请与您的老师联系。或者应该有一个最大数量的学生,或者你应该能够使用一个标准的容器。如果你在这两个问题上都是对的,那就找一个新老师/学校。@MooingDuck我在最后一个问题中得到了与这个相同的答案:O…你确定要数组(即连续内存位置)吗?或者你可以自己写一个简单的链表并使用它。除非老师希望你使用递归?我想你也不能使用std::list。跟你的老师谈谈。或者应该有一个最大数量的学生,或者你应该能够使用一个标准的容器。如果你在这两个问题上都是对的,那就找一个新老师/学校。@MooingDuck我在最后一个问题中得到了与这个相同的答案:O…你确定要数组(即连续内存位置)吗?或者你可以自己写一个简单的链表并使用它。除非老师想让你用递归来实现这个功能?输入文件将由老师提供,我的输入文件只包含3-4个学生。但我不知道她会用多少。这可能会很多,因为我们被要求按姓氏、年龄对它们进行排序。(使用我们自己的排序实现)…输入文件将由老师提供,我的文件只包含3-4名学生。但我不知道她会用多少。这可能会很多,因为我们被要求按姓氏、年龄对它们进行排序。(使用我们自己的排序实现)…递归答案会更简单think@MooingDuck他把这个问题作为家庭作业,所以真正的问题是他的教授在寻找什么样的答案:是重新实现
std::vector
,还是使用不同方法的原始解决方案。(我喜欢递归解决方案的优雅,但如果它是用于实际应用程序的话,我会担心堆栈溢出等问题。)递归答案会更简单think@MooingDuck他把这个问题作为家庭作业,所以真正的问题是他的教授在寻找什么样的答案:重新实现
std::vector
,或者使用di的原始解决方案