题目
小码哥正在和他的小伙伴们在进行一场编程比赛。这场比赛的主题是“寻找数字大王”,旨在考验各位参赛者对数据的洞察力和编程能力。比赛的规则十分简单:有一个包含𝑛个整数的数列,参赛者需要编写一个程序,从这些数字中找出最大的那个数,称其为“数字大王”。他知道,这不仅仅是一次技术上的挑战,更是一次速度的较量,小马哥深吸一口气,开始了他的操作。
格式
输入格式:第一行一个整数𝑛;
第二行n个不超过1000的正整数。
输出格式:一行一个整数,表示输入的𝑛个正整数的最大值。
样例 1
输入:5
8 5 9 6 3
输出:9
其中:0<𝑛≤10000
0<n≤10000
题解
1.定义数组
vector<int> numbers(n); //声明并初始化了一个名为 numbers 的整数向量(动态数组),其核心作用是存储用户输入的 n 个正整数。
1. vector 是什么?
vector 是 C++ 标准库中的动态数组容器,位于 <vector> 头文件中。与普通数组相比,它的优势在于:动态大小:可在运行时调整长度;自动内存管理:无需手动分配 / 释放内存;丰富的成员函数:如 push_back、size、max_element 等。
2. vector<int> numbers(n); 的含义
① 声明向量:
vector<int> numbers; // 声明一个存储int类型的向量
② 初始化大小:
通过参数 (n) 指定向量的初始大小为 n,即预分配 n 个元素的空间:
vector<int> numbers(n); // 创建包含n个元素的向量
此时,numbers 中包含 n 个初始值为 0 的整数(默认初始化)。
2.核心
// 方法1:使用STL的max_element函数
int max_value = *max_element(numbers.begin(), numbers.end());//查找并返回向量 numbers 中的最大值
1.max_element 函数概述:
所属头文件:<algorithm>
功能:在指定范围内查找第一个最大值元素的迭代器
函数原型:
template<class ForwardIt>
ForwardIt max_element(ForwardIt first, ForwardIt last);
template<class ForwardIt>:声明这是一个函数模板,ForwardIt 是模板参数,表示前向迭代器类型。
ForwardIt max_element(...):返回类型为 ForwardIt,即一个指向最大值的迭代器。
参数:
first:起始迭代器(包含)
last:结束迭代器(不包含)
2. 关键部分解析
① numbers.begin() 和 numbers.end()
numbers.begin():返回指向向量第一个元素的迭代器
numbers.end():返回指向向量最后一个元素之后位置的迭代器(即 “超尾” 迭代器)
② max_element(...)
在 [numbers.begin(), numbers.end()) 范围内查找最大值
返回一个迭代器,指向找到的最大值元素
③ *max_element(...)
解引用迭代器:将迭代器转换为它指向的值
例如,若最大值是 89,则 *max_element(...) 返回 89
// 方法2:手动遍历寻找最大值
int max_value = numbers[0];
for (int i = 1; i < n; i++) {
if (numbers[i] > max_value) {
max_value = numbers[i];
}
}
代码
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main( )
{
int n;
cin>>n;
vector<int> nums(n);
for (int i=0;i<n;i++){
cin>>nums[i];
}
int max_value=*max_element(nums.begin(),nums.end());
cout<<max_value;
return 0;
}
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main( )
{
int n;
cin>>n;
vector<int> nums(n);
for (int i=0;i<n;i++){
cin>>nums[i];
}
int max_value=nums[0];
for(int j=1;j<n;j++){
if(nums[j]>max_value){
max_value=nums[j];
}
}
cout<<max_value;
return 0;
}