#2020寒假集训#C++STL-vector代码笔记
程序员文章站
2022-06-02 12:32:36
...
#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>//万能头文件
#include<vector>//vector头文件
using namespace std;
int main()
{
printf("\n");
int x;
vector<int> v;//vector是不定长数组
printf("初始时sizeof的值:%d\n\n",sizeof(v));
//动态分配内存,初始sizeof值不为零,但内容是空的
v.push_back(1);
v.push_back(3);
v.push_back(2);
//现在的vector是1 3 2
printf("现在的vector提前插入了元素1 3 2\n\n");
printf("v.empty();判断vector是否非空,按int输出:%d\n\n",v.empty());
int num,can;
num=v.size();
can=v.capacity();
printf("v.size();返回现有几个元素:%d\n\n",num);
printf("v.capacity();返回能储存几个元素:%d\n\n",can);
/*
分配空间原理(能储存不等于现有几个的原理)
___ ___如此处填满了2个位置
则再想插入一个元素,下一次申请空间的时候,要申请2个位置
___ ___ ___ ___填满4个再申请,要申请4个
以2的次方增长,申请连续空间
*/
printf("请输入一个x:");
scanf("%d",&x);
printf("\n");
v.push_back(x);
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{//begin()是首元素迭代器,end()却指向尾元素的下一个位置
if(it!=v.begin()) printf(" ");
else printf("v.push_back(x);在vector末尾插入一个x:");
printf("%d",*it);
}//it是迭代器,功能类似于指针,*it访问,可用于遍历
printf("\n\n");
v.pop_back();
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
if(it!=v.begin()) printf(" ");
else printf("v.pop_back();删除末尾最后一个元素x:");
printf("%d",*it);
}
printf("\n\n");
int n;
printf("请输入一个n:");
scanf("%d",&n);
printf("\n");
v.insert(v.begin()+2,n);
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
if(it!=v.begin()) printf(" ");
else printf("v.insert(it,n);在it迭代器位置插入一个元素n:");
printf("%d",*it);
/*
v.begin()+2是第三个位置,即第二个位置之后插入
插入后后面的元素后移
时间复杂度较大
*/
}
printf("\n\n");
v.erase(v.begin()+1);
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
if(it!=v.begin()) printf(" ");
else printf("v.erase(it);删除it迭代器位置的元素:");
printf("%d",*it);
//v.begin()+1是第二个位置,因为v.begin()就是第一个迭代器了
}
printf("\n\n");
v.erase(v.begin()+1,v.begin()+2);
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
if(it!=v.begin()) printf(" ");
else printf("v.erase(it1,it2,);删除[it1,it2)迭代器区间的元素:");
printf("%d",*it);
/*
v.begin()+1是第二个位置,v.begin()+2就是第二个位置
但是区间左闭右开,只删除了第二个位置的元素
*/
}
printf("\n\n");
v.clear();
printf("v.clear();清空并输出清空后的size元素量:%d\n\n",v.size());
printf("v.empty();判断vector是否非空,按int输出:%d\n\n",v.empty());
/*
empty()函数一般用于if判断或保存给flag
返回的是bool型,输出可为0/1
判断是否空,empty()出真假比size()出个数,在时间复杂度上更快
*/
return 0;
/*
较不常用函数
v.resize();创建指定数量的元素,并指定储存空间
v.reserve();指定vector的元素总数
*/
/*
#重难点# 多维vector
如vector<int> vv[200]是二维的
竖着0-199共200行,横着初始为空
如vector<int> vvv[200][200]是三维的
第三维不定长
vector<vector<int> > v相当于二维vector
但需要v.push_back();v[0].push_back()等区分
较为繁琐且不太美观,尽量少用
*/
}
运行结果如下
上一篇: mac内nodejs如何更新最新版本
下一篇: jquery如何判断元素内容为空