#include <iostream>
#include <vector>
using namespace std;
/*
知识点一:STL:
c++标准模板库(standard template Library),
提供一系列通用的,可复用的数据结构和算法
组成部分:容器、迭代器、算法、分配器、函数对象等等……
容器:提供了多种不同的数据结构:包括,向量(vector)、字符串(string)、栈(stack)……
迭代器:管家,管理容器中的元素
算法:提供对于容器各种操作,例如:排序,搜索、统计等……
分配器:分配空间
知识点二:vector(向量,动态数组)
静态数组:
1、大小固定,不能改变
2、不支持动态添加和修改
3、存储空间相对使用比较低
4、访问速度比较快,效率高
动态数组:
1、大小可动态调整,适用于数量不确定可能变化的数据
2、相对效率会低一点
3、支持冬天添加或者删除元素
动态数组的操作:
*/
int main() {
/*1、创建和初始化
格式: vector <数据类型> 数组名(常数/静态数组/动态数组);
int statics[10] ={1,2,3,4,5};
vector <int> nums = {1,2,3,4,5,6,7,8,9};
vector <char> dynamics(10,'a');
vector <char> dynamics ={'a','b','c','d'};
2、增添数据
数组名.push_back(数据) -> 将数据依次加入到末位,类似与Python中的append
数组名.insert(位置,数据) -> 将数据加入到指定位置(迭代器位置)
dynamics.push_back('a');
dynamics.push_back('b');
dynamics.push_back('c');
dynamics.insert(dynamics.end()-1,'0');
3、删除数据
数组名.pop_back() -> 删除末位
数组名.erase(起始位置,结束位置) -> 删除指定范围内的数据
数组名.clear() -> 清空数据
dynamics.pop_back();
dynamics.erase(dynamics.begin()+1);
dynamics.erase(dynamics.begin(),dynamics.end());
dynamics.clear();
4、修改数据
dynamics[0] = 'z';
5、首尾操作
首尾地址:
数组名.begin()
数组名.end()
首位值
数组名.front()
数组名.back()
cout<<dynamics.front()<<" "<<dynamics.back()<<endl;
6、判断是否为空
数组名.empty()
cout<<dynamics.empty()<<endl;
//遍历
for(int i=0; i<dynamics.size(); i++) cout<<dynamics[i]<<" ";
例题:
小杨有个包含 n 个数字的序列A ,即A = {A1,A2,A3……} 。
他想将其中小于 K 的数字都替换为序列的最小值,将 其中大于k 的数字都替换为序列的最大值,
请你帮他计算出替换后的序列。
//输入
int n,k;
cin>>n>>k;
vector <int> nums(n);
for (int i=0; i<n; i++) cin>>nums[i];
//运算
int maxn,minn;
maxn=minn=nums[1];
for (int i=1; i<n; i++){
if (nums[i]>maxn) maxn=nums[i];
if (nums[i]<minn) minn=nums[i];
}
for ( int i=0; i<n; i++){
if (nums[i]<k) cout<<minn<<" ";
if (nums[i]>k) cout<<maxn<<" ";
if (nums[i]==k) cout<<k<<" ";
}
例题:
小杨共有N个储蓄罐,编号从1到N。
从第1天开始,小杨每天都会往存钱罐里存钱。
具体来说,每天他都会挑选一个存钱罐存入i元钱。
过了D天后,他已经忘记每个储蓄罐里都存了多少钱了,你能帮帮他吗?
*/
//输入
int n,d;
cin>>n>>d;
vector <int> nums(d);
for (int i=0; i<d; i++) cin>>nums[i];
//运算
vector <int> money(n);
for (int i=0; i<d; i++){
int num = nums[i];
money[num] += i+1;
}
for (int i=0; i<n; i++) cout<<money[i]<<" ";
return 0;
}