一、vector 类
1.指定vector基类型
vector<int> vector<char> vector<string>
尖括号内的类型称为基类型,包含基类型规格说明的类在面向对象中被称之为参数化的类,c++中参数化的类通常被称为模板
2. 声明vector对象及其操作
vector<int> abc;
从vector中选取元素可以采用和数组一样的方式
对于vector引用调用(加一个 &)比默认复制调用更高效
声明n个元素的vector:
vector<int> abc(n);
二、set类
1 set定义
set的定义 <储存的类型> 容器名 如:储存int型的值 set<int> s;储存double型的值 set<double> s;储存string型的值 set<string> s;储存结构体或者类的值的值 set<结构体名> s;
2 set 基本函数
//常用函数(必学)
insert()//插入元素
count()//判断容器中是否存在某个元素
size()//返回容器的尺寸,也可以元素的个数
erase()//删除集合中某个元素
clear()//清空集合
empty()//判断是否为空
begin()//返回第一个节点的迭代器
end()//返回最后一个节点加1的迭代器
rbegin()//反向迭代器
rend()//反向迭代器
//功能函数(进阶)
find()//查找某个指定元素的迭代器
lower_bound()//二分查找第一个不小于某个值的元素的迭代器
get_allocator()//返回集合的分配器
swap()//交换两个集合的变量
max_size()//返回集合能容纳元素的最大限值
3 代码
#include<iostream>//c++标准头文件,可以使用cout,cin等标准编译用法
#include<set>//使用set需要带上这个文件
using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用
int main(){
set<int> s;//定义
s.insert(1);//插入元素1
s.insert(3);//插入元素3
s.insert(2);//插入元素2
cout<<"现有的元素有"<<endl;
for(int c:s){//遍历set,注意set会将元素自动排序,插入的顺序是1、3、2,遍历的顺序是1、2、3
cout<<c<<' ';
}
cout<<endl;
cout<<endl;
s.erase(3);//删除元素3
cout<<"删除元素3后,现有的元素有"<<endl;
for(int c:s){//遍历set,注意set会将元素自动排序,插入的顺序是1、3、2,遍历的顺序是1、2、3
cout<<c<<' ';
}
cout<<endl;
cout<<endl;
cout<<"现在s.size()==";
cout<<s.size();
cout<<",即有两个元素" ;
cout<<endl;
cout<<endl;
cout<<"是否包含元素2:"<<endl;
cout<<"s.count(2)=="<<s.count(2)<<"即包含元素2";
cout<<endl;
cout<<endl;
cout<<"是否包含元素3:"<<endl;
cout<<"s.count(3)=="<<s.count(3)<<"即不包含元素3";
cout<<endl;
cout<<endl;
cout<<"s是否是空的:"<<endl;
cout<<"s.empty()=="<<s.empty()<<"即s不为空";
cout<<endl;
cout<<endl;
s.clear();//清空集合
cout<<"s是否是空的:"<<endl;
cout<<"s.empty()=="<<s.empty()<<"即s是空的";
cout<<endl;
cout<<endl;
cout<<"s是否是空的:"<<endl;
cout<<"s.size()=="<<s.size()<<"即s是空的"; //s.size()==0也可以判断集合是否为空,为了考虑代码可读性,一般不用size()代替empty()
cout<<endl;
cout<<endl;
}
三、map类
1 map简介
map是STL的一个关联容器,以键值对存储的数据,其类型可以自己定义,每个关键字在map中只能出现一次,关键字不能修改,值可以修改;map同set、multiset、multimap(与map的差别仅在于multimap允许一个键对应多个值)内部数据结构都是红黑树,而java中的hashmap是以hash table实现的。所以map内部有序(自动排序,单词时按照字母序排序),查找时间复杂度为O(logn)。
2 代码
#include <iostream>
#include <unordered_map>
#include <map>
#include <string>
using namespace std;
int main()
{
//注意:C++11才开始支持括号初始化
unordered_map<int, string> myMap={{ 5, "张大" },{ 6, "李五" }};//使用{}赋值
myMap[2] = "李四"; //使用[ ]进行单个插入,若已存在键值2,则赋值修改,若无则插入。
myMap.insert(pair<int, string>(3, "陈二"));//使用insert和pair插入
//遍历输出+迭代器的使用
auto iter = myMap.begin();//auto自动识别为迭代器类型unordered_map<int,string>::iterator
while (iter!= myMap.end())
{
cout << iter->first << "," << iter->second << endl;
++iter;
}
//查找元素并输出+迭代器的使用
auto iterator = myMap.find(2);//find()返回一个指向2的迭代器
if (iterator != myMap.end())
cout << endl<< iterator->first << "," << iterator->second << endl;
system("pause");
return 0;
}