vector
定义
#include<vector>
using namespace std;
vector<数据类型>数组名称
方法总结
push_back() 在末尾加入一个元素
pop_back() 在末尾弹出一个元素
size() 获取长度
clear() 清空
- 高级用法
1.不仅可以放基本的数据结构,还可以存储自定义数据类型,例如结构体等等。
2.构造函数
int n=10;
vector<int>a(n,1);
这段代码调用了构造函数,第一个参数表示动态数组的长度,第二个参数表示数组里面每个元素的值,如果不传入第二个参数那么初始值为0。
二维动态数组
定义:
vector<vector<int> >a;
快速构造一个n行m的动态数组
vector<vector<int> >a(n,vector<int>(m,0));
//此处的初始值为0
集合set
定义
#include<set>
using namespace std;
set<string>a;
//定义了一个string类型的集合a
方法
insert() 插入一个元素 O(log n)
erase() 删除一个元素 O(log n)
count() 统计集合中某个元素的个数 O(log n)
size() 获取元素个数 O(1)
clear() 清空 O(n)
遍历元素
c++可以通过迭代器访问集合的每个元素。通过*操作可以获取迭代器指向的元素。通过++,–可以指向上(下)一个元素。
写法:set<int>::iterator it
begin函数返回容器中起始元素的迭代器,end函数返回容器的尾后迭代器。
#include <set>
#include <string>
#include <iostream>
using namespace std;
int main() {
set<string> country;
country.insert("China");
country.insert("America");
country.insert("France"); "America", "France"}
for (set<string>::iterator it = country.begin(); it != country.end(); it++) {
cout << *it << endl;
}
return 0;
}
set中的元素不会重复,set自带排序。
结构体集合
由于set自带排序,所以使用结构体set时,要在结构体里面定义一个重载了小于符号的
#include <iostream>
#include <set>
using namespace std;
struct Point{
int x,y;
bool operator<(const Point &rhs)const{
if(x==rhs.x){
return y<rhs.y;
}else {
return x<rhs.x;
}
}
};
int main() {
int n;
set<Point> v;
cin>>n;
for(int i=0;i<n;i++){
Point temp;
cin>>temp.x>>temp.y;
v.insert(temp);
}
for(set<Point>::iterator it = v.begin();it!=v.end();it++){
cout<<it->x<<" "<<it->y<<endl;
}
return 0;
}
例如这样,< 表示要重载的运算符,以上代码表示优先x从小到大排序,如果x相同,那么再按照y从小到大排序。
bool operator<(const Point &rhs)const
映射map
定义:
#include<set>
using namespace std;
set<t1,t2>a;
方法
inset() 插入一对映射 O(log n)
count() 判断关键词是否存在 O(log n)
size() 获取映射对的个数 O(1)
clear() 清空 O(n)
插入一对映射
insert()函数的参数是一个pair
pair定义在头文件utility里面,可以看成是有两个成员变量first,second的结构体,并且重载了<运算符(先比较first的大小,再比较second)。make_pair(v1,v2)函数返回由v1,v2,初始的pair
#include <map>
#include <string>
#include <utility>
using namespace std;
int main() {
map<string, int> dict; // dict 是一个 string 到 int 的映射,存放每个名字对应的班级号,初始时为空
dict.insert(make_pair("Tom", 1)); // {"Tom"->1}
dict.insert(make_pair("Jone", 2)); // {"Tom"->1, "Jone"->2}
dict.insert(make_pair("Mary", 1)); // {"Tom"->1, "Jone"->2, "Mary"->1}
dict.insert(make_pair("Tom", 2)); // {"Tom"->1, "Jone"->2, "Mary"->1}
return 0;
}
dict.insert(make_pair(“Tom”, 1)); 这句话也可以直接用下表表示,dict[“Tom”]=1,这样用下标的方式更常见。