Contest100000596 - 《算法笔记》6.1小节——C++标准模板库(STL)介绍->vector的常见用法详解

6.1 vector的常见用法详解
vector翻译为向量,实际为变长数组
1.vector的定义


2.vector容器内元素的访问

//vector例子
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int main()
{
vector<int> vi;
for(int i = 1;i <= 5;i++){
vi.push_back(i);
}
//vi.begin()为取vi的首元素地址,而it指向这个地址
vector<int>::iterator it = vi.begin();
/*
for(int i=0;i<5;i++){
cout<<*(it+i)<<" ";
} */
for(vector<int>::iterator it = vi.begin();it != vi.end();it++){
cout<<*it<<" ";
}
return 0;
}
3.vector常用函数实例解析
(1)push_back()

(2)pop_back()

(3)size()

(4)clear()

(5)insert()

(6)erase()


vector函数整合代码
//vector例子
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int main()
{
vector<int> vi;
//push_back()函数
for(int i = 1;i <= 5;i++){
vi.push_back(i);
}
cout<<"插入元素后vector数组元素为:"<<endl;
//vi.begin()为取vi的首元素地址,而it指向这个地址
vector<int>::iterator it = vi.begin();
/*
for(int i=0;i<5;i++){
cout<<*(it+i)<<" ";
} */
for(vector<int>::iterator it = vi.begin();it != vi.end();it++){
cout<<*it<<" ";
}
cout<<endl;
cout<<"当前vector数组容量为"<<vi.size()<<endl;
//pop_back()函数
vi.pop_back();//删除vi的尾元素5
cout<<"删除尾元素5后vector数组元素为:"<<endl;
for(int i=0;i < vi.size();i++){
cout<<vi[i]<<" ";
}
cout<<endl;
cout<<"删除尾元素5后数组容量为"<<vi.size()<<endl;
//insert
vi.insert(vi.begin() + 2,-1);//将-1插入vi[2]的位置
cout<<"将-1插入vi[2]的位置后vector数组元素为:"<<endl;
for(int i=0;i < vi.size();i++){
cout<<vi[i]<<" ";
}
cout<<endl;
cout<<"将-1插入vi[2]的位置后vector数组容量为"<<vi.size()<<endl;
//erase()vi[2]
vi.erase(vi.begin()+2);
cout<<"删除vi[2]位置元素-1后vector数组元素为:"<<endl;
for(int i=0;i < vi.size();i++){
cout<<vi[i]<<" ";
}
cout<<endl;
cout<<"删除vi[2]位置元素-1后vector数组容量为"<<vi.size()<<endl;
//erase(first,last)左闭右开
vi.erase(vi.begin()+1,vi.begin()+3);
cout<<"删除vi[1]~vi[2]位置元素2、3后vector数组元素为:"<<endl;
for(int i=0;i < vi.size();i++){
cout<<vi[i]<<" ";
}
cout<<endl;
cout<<"删除vi[1]~vi[2]位置元素2、3后vector数组容量为"<<vi.size()<<endl;
cout<<"清空元素后vector数组元素为:"<<endl;
vi.clear();
cout<<endl;
cout<<"清空元素后vector数组容量为"<<vi.size()<<endl;
return 0;
}
4.vector的常见用途

Codeup习题
Contest100000596 - 《算法笔记》6.1小节——C++标准模板库(STL)介绍->vector的常见用法详解
6114-Problem-A-Course List for Student(25)
题目链接:http://codeup.cn/problem.php?cid=100000596&pid=0
//6114-Problem-A-Course List for Student(25)
//参考大神
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
vector<int> stu[175761];//26*26*26*10+1
int hashName(char *s){//map<string,vector<>>超时,用hash存学生名
return (s[0] - 'A')*26*260+(s[1]-'A')*260+(s[2]-'A')*10 + (s[3] - '0');
}
int main()
{
int N,K,m,n;
char name[5];//string超时
scanf("%d%d",&N,&K);//cin超时
while(K--){
scanf("%d%d",&m,&n);
while(n--){
scanf("%s",name);
stu[hashName(name)].push_back(m);//存储姓名
}
}
while(N--){
scanf("%s",name);
int h = hashName(name);
printf("%s %d",name,stu[h].size());
sort(stu[h].begin(),stu[h].end());//课程编号从小到大遍历
for(vector<int>::iterator it = stu[h].begin();it != stu[h].end();it++){
printf(" %d",*it);
}
printf("\n");
}
return 0;
}
6117-Problem-B-Student List for Course(25)
题目链接: http://codeup.cn/problem.php?cid=100000596&pid=1
//6117-Problem-B-Student List for Course(25)
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
char name[40010][5];//string超时
vector<int> course[2510];//存放name编号
bool cmp(int a,int b){
return strcmp(name[a],name[b]) < 0;
}
int main()
{
int N,K,index,n;//N学生总数,K课程总数;
scanf("%d%d",&N,&K);
for(int i=0;i<N;i++){
scanf("%s",name[i]);
cin>>n;
while(n--){
cin>>index;
course[index].push_back(i);//存储姓名及相关信息
}
}
for(int i=1;i<=K;i++){
printf("%d %d\n",i,course[i].size());//使用cout超时
sort(course[i].begin(),course[i].end(),cmp);
for(vector<int>::iterator it = course[i].begin();it != course[i].end();it++){
printf("%s\n",name[*it]);
}
}
return 0;
}
小结
vector就是变长数组,6大函数:push_back()、pop_back()、size()、clear()、 insert()、erase();vector可以用来存储数据,特别是数据量未知情况下不好设置数组长度
本文深入探讨了C++标准模板库(STL)中vector容器的使用方法,包括定义、元素访问及六大常用函数(push_back、pop_back、size、clear、insert、erase)的实例解析。通过Codeup习题,展示了vector在数据存储和操作上的应用。

213

被折叠的 条评论
为什么被折叠?



