刚刚开始研究c ++,我必须制作一个具有获取最大数组值并将其打印的函数的动态数组。而且我的代码似乎有问题。我做错了什么,请帮忙(非常感谢批评):
#include <iostream>
using namespace std;
int getmax(int* arr,int n)
{
int res=arr[0];
for (int i=0;i<n;i++)
{
if (res<arr[i]) res=arr[i];
}
return res;
}
int main()
{
int*arr;
int n;
arr=new int[n];
cout<<"Enter array length: ";
cin>>n;
for(int i=0; i<n; i++)
{
cout<<"Enter array number "<<i+1<<". : ";
cin>>arr[i];
}
int maxi;
maxi=getmax(arr,n);
cout<<"Biggest number in array is "<<maxi;
delete[]arr;
return 0;
}
答案 0 :(得分:1)
这些评论似乎已经解决了您的问题,但是由于您要求(建设性)批评,因此您应该真正学习现代C ++。在现代C ++中,我们仅在没有其他方法时才使用裸指针。在适当的时候,我们也会利用标准库。只要您学习了语言和库,这两件事将迅速使您成为更强大的程序员,并减少出错的机会。
以下是您的程序应用以下原则的示例:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
size_t n;
cout<<"Enter array length: ";
cin>>n;
vector<int> arr(n); // Create a vector with n integers
// Iterate over the vector
for( auto i = arr.begin(); i != arr.end(); ++i )
{
cout<<"Enter array number "<< (i-arr.begin())+1 << ". : ";
cin>>*i; // Assign the input to the vector element through the iterator
}
// Get an iterator pointing to the largest element in the vector
auto maxi = max_element(arr.cbegin(), arr.cend());
cout<<"Biggest number in array is "<< *maxi << '\n';
return 0;
}
std::vector
构造函数分配内存,而arr
超出范围时,析构函数释放内存。不再需要繁琐的匹配new
和delete
。当您需要将对象的生存期延长到当前范围之外时,请使用具有对象所需生存期的智能指针或容器。