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

C++中vector和set简单用法

程序员文章站 2022-07-14 12:29:50
...
#include<iostream>
#include<vector>
#include<set>
using namespace std;
int main(){
	//vector用法简介 
	//1.vector的定义
	vector<int> name1;//int位置处可以int、double、char、node(结构体类型)
	//如果int位置处是vector类型
	vector<vector<int>  > name2;//> >这两个符号之间要有至少一个空格 
	name2.push_back(name1);//可以将name2看做两个维度都可变的二维数组 
	//定义vector数组的方法 
	vector<int> array[10];//array[0]~array[9]每一个都是一个vector容器 
	//这和name2明显是不同,该情况下一维长度已经固定 
	//2.vector容器内的元素访问
	//(1)通过下标访问;(2)通过迭代器访问
	//(1)和数组的使用相同,此处不做讲述(唯一要注意的是:没有向容器中加入容器前不能使用下标访问) 
	//(2)迭代器(iterator)可以理解为类似指针的一种用法
	name1.push_back(5);//.push_back()在vector后面添加一个元素 
	vector<int>::iterator it=name1.begin(); //.begin()函数的返回值为迭代器类型,
	//同时迭代器也支持自增自减操作it++/++it/it--/--it 
	//.end()函数返回值与之相同 
	cout<<*it<<" "<<name1[0]<<endl;; //输出5 5	可以看出name1[1]与*(it)是等价的
	//.begin();//返回的是第一个元素的地址 
	//.end();//返回的是最尾元素的下一个地址,不存储任何元素 
	 //3.常用的函数
	name1.push_back(4);//括号内要有与定义时vector<int> name1;尖括号内类型相同的变量或值 
	name1.pop_back();//括号内没有东西
	name1.size();//返回值为unsigned型,不过没有什么影响 
	name1.clear();//用来清空vector容器中的所有元素,时间复杂度为O(n),n为元素的个数 
	for(int i=0;i<5;++i){
		name1.push_back(i);
	}
	name1.insert(name1.begin()+1,1);//将1插入到name1[1]的位置
	vector<int>::iterator it2=name1.begin()+4;  
	name1.erase(it2);//删除迭代器为it2处的元素,删除的是name1[4]
	name1.erase(name1.begin(),name1.begin()+3);//删除的是name1[0],name1[1],name1[2],很多时候如果有区间则遵循左闭右开的规则,此处也是不会删除name1.begin()+3处的元素
	//set集合用法简介 
	//set的定义
	set<int> a_set;//用法和vector基本类似,接下来介绍基本用法的不同之处,简单函数的话不会省略都会讲一下
	//2.set的访问
	//set只能通过迭代器访问
	set<int>::iterator it3;
	//在C++的STL容器中除vector和string外都不支持*(it+i)这种访问方式
	//同时set中也不支持it<st.end()的写法
	a_set.insert(1); 
	a_set.insert(2);
	a_set.insert(3);
	a_set.insert(4);
	a_set.insert(5);
	for(set<int>::iterator it4=a_set.begin();it4 != a_set.end();++it4) 
		cout<<*it4<<endl;//输出1、 2、 3、 4、 5 
	 a_set.insert(6);//该函数能将6插入到set容器中,并自动递增排序并且去重,时间复杂度为O(logN),N为元素个数 
	//set的用途:set最主要的用途是自动排序并去重,因此遇到需要去重但是不方便开数组的可以尝试使用set来解决
	//3.简单函数的介绍
	it3=a_set.find(5);//该函数返回a_set中值为5的迭代器并返回,时间复杂度O(logN) 
	cout<<*it3<<endl;//输出5
	//.erase()的两种用途
	//(1)删除单个元素;但是删除单个元素也有两种方法
	//<1>
	a_set.erase(*it3);
	for(set<int>::iterator it4=a_set.begin();it4 != a_set.end();++it4) 
		cout<<*it4<<endl;//输出1、 2、 3、 4、 6 
	//<2>
	a_set.erase(2);//括号中为要删除元素的值
	for(set<int>::iterator it4=a_set.begin();it4 != a_set.end();++it4) 
		cout<<*it4<<endl;//输出1、 3、 4、 6 
	//(2)删除多个元素,与vector相同此处不载过多解释
	a_est.size();//用来获得a_set内元素的个数 ,时间复杂度O(1) 
	a_set.clear();//时间复杂度为O(N) 
	return 0;
}
相关标签: 笔记 c++