1. 基础操作
1.1说明
1.1.1赋值、比较大小
- vector可以定义时赋初值
- vec之间可以 赋值,比较大小(一个一个数比较)
1.1.2存储方式
每次空间不够了申请二倍的空间,把之间的所有元素复制到此处(o(n))
1.1.3访问方式
- 迭代器:可用begin(),end()访问vector
也可用rbegin(),rend()反向访问vector
for (vector<int>::iterator it = a.begin(); it != a.end(); it++){
cout << *it << endl;
}
- 引用:vector[2]也可同迭代器一样访问
- 自动迭代器:vector::iteractor == auto:自动类型推导
- 自动引用:for(auto it:vec){}表示遍历所有vec里的元素(不是迭代器不用*it,而是真正的某个元素用it[2])
1.1.4说明
- 可以二维vector:vector<vector< int> >
1.2函数
1.2.1基础函数
push_back(),pop_back()
vector.size()
reverse(vec.begin(),vec.end())
vector.clear();清空
1.2.2sort排序
1.2.2.0说明
vector.end()取得是最后一个元素得后一位的地址(也就是:*vector.end()是错的)
所以sort(首地址=第一个元素地址,尾地址=最后一个元素地址+1)
1.2.2.1调用函数
sort(vec.begin(), vec.end());从小到大(nlgn的复杂度)
sort(vec.begin(), vec.end(), greater());从小到大从大到小
1.2.2.2 自定义比较函数
1.自定义
bool cmp(const node &a, const node &b){
return a.score < b.score;
}
sort(vectorStudents.begin(),vectorStudents.end(),comp);
2.重载小于号(在无法插入cmp时使用)
bool operator < (const student & stu1,const student &stu2){
return stu1.score > stu2.score;
}
1.2.3去重
unique(vec.begin(), vec.end())把重复的元素放到后面,并且返回那啥的指针,方便去重删除,(o(n)),使用前必须排好序
去重:vec.erase(unique(vec.begin(), vec.end()), vec.end());
1.2.3找大于等于的点
vector必须是有序,找到第一个大于等于9的元素,lower_bound(A.begin(), A.end(), 9)返回9的迭代器,否则返回A.end()
upper_bound()返回大于它的第一个元素(olgn:他是二分查找)