C++ 如何在c++;
我必须将文件中的所有数据(整数)读取到数组中,然后迭代数组以生成最小堆,并将它们添加到当前堆的最后一个元素之后。读入数组后,我必须调用C++ 如何在c++;,c++,arrays,stl,heap,heapsort,C++,Arrays,Stl,Heap,Heapsort,我必须将文件中的所有数据(整数)读取到数组中,然后迭代数组以生成最小堆,并将它们添加到当前堆的最后一个元素之后。读入数组后,我必须调用SiftUp()。在所有输入的末尾,我试图打印出最小堆数组的前五个元素。输出给我以下错误 发生错误: [Error] invalid conversion from 'int' to 'int*' [-fpermissive] 我的节目: using namespace std; int heapSize; void SiftUp(int arr[], int
SiftUp()
。在所有输入的末尾,我试图打印出最小堆数组的前五个元素。输出给我以下错误
发生错误:
[Error] invalid conversion from 'int' to 'int*' [-fpermissive]
我的节目:
using namespace std;
int heapSize;
void SiftUp(int arr[], int heapSize);
const int arr_Size=500;
int heapArr[arr_Size];
int main()
{
int integers;
string fileName;
ifstream infile;
cout << "Please enter the name of the file to open :";
cin >> fileName;
infile.open(fileName.c_str());
if(!infile)
{
cerr << "An eror occurred while openieng the file.";
exit(1);
}
while(!infile.eof())
{
for (int i=0; i<arr_Size; i++)
{
infile >> integers;
heapArr[i]=integers;
heapSize=i;
cout << "numbers " << heapArr[i] << endl;
SiftUp(heapArr[i],heapSize); // Error: invalid conversion
}
}
infile.close();
return 0;
}
void SiftUp(int arr[], int heapSize)
{
int p;
if (heapSize==1)
return;
else p = heapSize/2;
if (arr[p] > arr[heapSize])
return;
else swap (arr[heapSize],arr[p]);
SiftUp(arr[], p); // Error : expected primary-expression before ']'
for (int count =0 ; count <5 ; count ++)
{
cout << " at index 1 : " << arr[count] << endl;
}
}
使用名称空间std;
智力治疗;
void SiftUp(int arr[],int heapSize);
const int arr_Size=500;
int heapArr[arr_Size];
int main()
{
整数;
字符串文件名;
河流充填;
cout>文件名;
open(fileName.c_str());
如果(!infle)
{
cerr整数;
heapArr[i]=整数;
heapSize=i;
cout请阅读这篇关于变色龙问题的帖子。现在进入当前问题
void SiftUp(int arr[], int heapSize);
您的函数需要一个数组,然后是一个int
SiftUp(heapArr[i],heapSize);
向函数传递一个int和一个int。编译器拒绝将int重新解释为int*(因为这样做会是一个糟糕的主意)。尝试向函数传递数组和int
SiftUp(heapArr,heapSize);
这里是C++数组的引用。
对于(i=1;i>integer;
如果(infle.fail())中断;
heapArr[i]=整数;
SiftUp(i);
}
infle.close();
heapSize=i;
对于(int count=1;count 99%确定您的程序正在崩溃。尝试使用调试器找出原因。Id
是什么?如果是您的程序,当它找不到您请求的文件时,将返回1。您确定该文件存在吗?如果不是问题,您在哪里看到此错误?我如何复制它?@doctorlove My crystal ball说这是问题实际上,ld
,链接器。这意味着程序甚至不编译。或者编译,但不链接。void SiftUp(int,int);
定义在哪里(以及如何定义)
如何构建它?对标题的巧妙回答:使用std::priority\u队列
(和/或其组件std::push_heap
std::pop_heap
和std::make_heap
)使用两个循环读取文件没有任何意义。一个循环就可以了。请参阅我的代码。这会有所帮助。此外,不需要将全局声明的数组传递到函数中。您可以直接使用它们。请参阅我的代码。我已更改了变量的名称。您至少应该自己工作,就像我认为的那样。请尝试更有效地编写代码这是一个很好的方法,试着学习如何自己调试程序。它会起作用的。
int i;
for (i=1; i<arr_Size; i++){
infile >> integer;
if(infile.fail())break;
heapArr[i]=integer;
SiftUp(i);
}
infile.close();
heapSize=i;
for (int count =1 ; count <=5 ; count ++){
cout << count <<" :"<< heapArr[count] << endl;
}
return 0;
}
void SiftUp(int heapSize){
int p;
if (heapSize==1) return;
p = heapSize/2;
if (heapArr[p] < heapArr[heapSize]) return;
swap (heapArr[heapSize],heapArr[p]);
SiftUp(p);
}