pta模板题vectorc++
时间: 2024-12-30 13:33:46 浏览: 62
### PTA C++ Vector 模板题使用方法
#### 定义与初始化Vector
`vector` 是 STL 中的一种动态数组容器,允许在运行时调整大小。创建 `vector` 的方式有多种:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 创建一个空的 int 类型 vector
vector<int> vec;
// 初始化含有特定数量元素的 vector
vector<int> vec_init(10, 0); // 含有十个整数,默认值为0
// 使用列表初始化器语法
vector<int> vec_list = {1, 2, 3};
}
```
#### 基本操作函数
对于 `vector` 的基本操作包括但不限于增加、访问以及删除元素。
- **添加元素**
```cpp
vec.push_back(4); // 添加到末尾
// 插入指定位置之前的新元素
vec.insert(vec.begin(), 5);
```
- **访问元素**
可以直接通过下标索引来获取或修改向量中的元素[^1]。
```cpp
cout << "First element: " << vec[0];
cout << "\nLast element: " << vec.back();
```
- **移除元素**
可以利用成员函数 `pop_back()` 来弹出最后一个元素;也可以用迭代器指向的位置作为参数调用 `erase()` 函数来删除单个元素或多组连续元素。
```cpp
if (!vec.empty()) {
vec.pop_back(); // 移除最后一位
}
auto it = find(vec.begin(), vec.end(), value_to_remove);
if (it != vec.end())
{
vec.erase(it); // 删除找到的第一个匹配项
}
```
#### 处理PTA题目实例——寻找数字之王
针对给定范围内的自然数序列统计其中各个位上出现频率最高的数字称为“数字之王”。下面给出一段基于上述知识点解决该类问题的具体实现方案[^2]:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(const pair<int,int>& a,const pair<int,int>& b){
if(a.second==b.second)return a.first<b.first;
return a.second>b.second;
}
void countMaxDigit(int start, int end) {
vector<pair<int, int>> digitCount(10);
for (int i = start; i <= end; ++i) {
string numStr = to_string(i);
for(char ch : numStr){
digitCount[ch-'0'].second++;
}
}
sort(digitCount.begin(),digitCount.end(),compare);
cout<<digitCount[0].second<<"\n";
bool isFirst=true;
for(auto& p:digits){
if(p.second!=digits[0].second)break;
if(!isFirst)cout<<" ";
isFirst=false;
cout<<p.first;
}
}
```
此段程序实现了对一定区间内所有正整数各位数字频次的计算,并找出最高频次的一个或多个数字作为结果输出。注意这里为了处理可能存在的多位相同最大值情况特别设计了一个比较规则用于排序前后的筛选过程.
阅读全文
相关推荐



















