动态内存分配,C
我需要编写一个可以读取文件的函数,并将所有唯一的单词添加到动态分配的数组中.我知道如何创建一个动态分配的数组,例如,如果你要求数组中的条目数:
int value; cin >> value; int *number; number = new int[value]; 我的问题是我提前不知道文件中有多少个独特的单词,所以我最初不能只读取值或要求它.此外,我需要使用数组,而不是向量.有没有办法使用动态分配的数组执行类似于push_back的操作? 现在,我唯一能想到的就是首先创建一个存储文件中所有单词的数组(1000),然后让它通过它并找到唯一单词的数量.然后使用该值创建一个动态分配的数组,然后我再次通过该数组来存储所有唯一的单词.显然,对于应该有更有效解决方案的东西来说,这个解决方案听起来非常落伍. 有人能指出我正确的方向,是否有更好的方法?我觉得这对矢量来说相当容易,所以我认为要求它成为一个数组是有点愚蠢的(除非在这个家庭作业中需要了解动态分配数组的一些重要事项). 编辑:这是另一个问题.我知道文件中会有1000个单词,但我不知道会有多少个单词.这是一个想法.我可以创建一个1000个元素的数组,将所有独特的单词写入该数组,同时跟踪我已完成的数量.完成后,我可以配置一个动态分配带有该计数的新数组,然后将这些单词从初始数组复制到第二个数组.不确定这是否最有效,但由于我们无法使用向量,我认为效率不是这项任务中的一个重要问题. 解决方法
矢量确实比数组更适合这种情况.真.
但是如果你必须使用一个数组,你至少可以使它像一个向量:-). 方法如下:分配具有一定容量的阵列.将分配的容量存储在“容量”变量中.每次添加到数组时,都会增加一个单独的“length”变量.当您向数组添加内容并发现它不够大(长度==容量)时,分配第二个更长的数组,然后将原始内容复制到新数组,最后释放原始数据. 这为您提供了能够增长阵列的效果.如果性能成为一个问题,一次增加多个元素. 恭喜,按照这些简单的步骤,您已经在数组上实现了一小部分std :: vector功能! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |