欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

#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()等区分
		较为繁琐且不太美观,尽量少用
	*/
}

运行结果如下
#2020寒假集训#C++STL-vector代码笔记

相关标签: 2020寒假集训