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;
}
上一篇: 数据结构——循环队列的简单实现