vector是最常用的容器之一,功能十分强大,可以储存、管理各种类型的数据。在很多情况下可以用来代替功能比较局限的普通数组。向量(Vector)是一个封装了动态大小数组的顺序容器。
push_back() //在数组的最后添加一个数据
pop_back() //去掉数组的最后一个数据
at() //得到编号位置的数据
begin() //得到数组头的指针
end() //得到数组的最后一个单元+1的指针
find() //判断元素是否存在
front() //得到数组头的引用
back() //得到数组的最后一个单元的引用
max_size() //得到vector最大可以是多大
capacity() //当前vector分配的大小
size() //当前使用数据的大小
capacity(); //返回a在内存中总共可以容纳的元素个数
a.reserve(100); //改变当前vecotr所分配空间的大小将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100
a.resize(10); //将a的现有元素个数调至10个,多则删,少则补,增加的元素其值默认为0
a.resize(10,2); //将a的现有元素个数调至10个,多则删,少则补,增加的元素其值为2
erase() //删除指针指向的数据项
clear() //清空当前的vector
rbegin() //将vector反转后的开始指针返回(其实就是原来的end-1)
rend() //将vector反转构的结束指针返回(其实就是原来的begin-1)
empty() //判断vector是否为空
swap() //与另一个vector交换数据
a.swap(b); //b为向量,将a中的元素和b中的元素进行整体性交换
reverse(obj.begin(),obj.end()); // 反向迭代器,实现元素对调
find(数组的头地址, 数组的尾地址, 要找的数)
find(nums.begin(), nums.end(), target);
//返回的是target第一次出现的地址
//如果没有找到返回尾地址nums.end()
#include
#include
#include
using namespace std;
using std::vector;
using std::cout;
using std::endl;
int main() {
vector nums = {2,7,8,8,9};
int target = 8;
vector::iterator loc = find(nums.begin(), nums.end(), target);
if (loc == nums.end()) {
cout << "数组中没有" << target << endl;
}
else {
cout << "数组中有" << target << endl;
cout << "并且, 它的第一次出现的位置为:" << loc - nums.begin() << endl;
}
}
#include
using namespace std;
int main() {
//顺序访问
vectorobj;
for(int i=0;i<10;i++) {
obj.push_back(i);//存储数据
}
//方法一数组访问
cout<<"直接利用数组:";
for(int i=0;i<10;i++) {
cout<::iterator it;
//声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素
for(it=obj.begin();it!=obj.end();it++) {
cout<<*it<<" ";
}
return 0;
}
insert (position, x );
insert (position, n, x );
insert (position, first, last );
插入新的元素,
第一个函数,在迭代器指定的位置前插入值为x的元素
第二个函数,在迭代器指定的位置前插入n个值为x的元素
第三个函数,在迭代器指定的位置前插入另外一个容器的一段序列迭代器first到last
insert() //往vector任意位置插入一个元素,指定位置或者指定区间进行插入,
//第一个参数是个迭代器,第二个参数是元素。返回值是指向新元素的迭代器
vector vA;
vector::iterator it;
//指定位置插入
//iterator insert(const_iterator _Where, const _Ty& _Val)
//第一个参数是个迭代器位置,第二个参数是元素
it = vA.insert(vA.begin(),2); //往begin()之前插入一个int元素2 (vA={2,1}) 此时*it=2
//指定位置插入
//void insert(const_iterator _Where, size_type _Count, const _Ty& _Val)
//第一个参数是个迭代器位置,第二个参数是要插入的元素个数,第三个参数是元素值
it = vA.insert(vA.end(),2,3);//往end()之前插入2个int元素3 (vA={2,1,3,3}) 此时*it=3
//指定区间插入
//void insert(const_iterator _Where, _Iter _First, _Iter _Last)
vector vB(3,6); //vector<类型>标识符(最大容量,初始所有值)
it = vA.insert(vA.end(),vB.begin(),vB.end()); //把vB中所有元素插入到vA的end()之前 (vA={2,1,3,3,6,6,6})
//此时*it=6,指向最后一个元素值为6的元素位置
erase ( position );
erase (first, last );
删除元素或一段序列
#include
#include
#include
using namespace std;
int main() {
vectorobj;//创建一个向量存储容器 int
for(int i=0;i<10;i++){ // push_back(elem)在数组最后添加数据
obj.push_back(i);
cout<
sort 的头文件
#include
#include
#include
using namespace std;
int main() {
int a[] = {8,6,2,9,3,5,4,1,7,10};
vector arr(a, a+5);
sort(arr.begin(),arr.end());
for(int i = 0; i
sort默认排序从小到大,使用greater()
#include
#include
#include
using namespace std;
int main() {
int a[] = {8,6,2,9,3,5,4,1,7,10};
vector arr(a, a+5);
sort(arr.begin(),arr.end(),greater());
for(int i = 0; i
自定义函数
#include
#include
#include
using namespace std;
bool cmp_max(int x,int y){
return x > y;
}
int main() {
int a[] = {8,6,2,9,3,5,4,1,7,10};
vector arr(a, a+5);
sort(arr.begin(),arr.end(),cmp_max); // 可以用lambda
// sort(arr.begin(),arr.end(),[](int x,int y){return x>y;});
for(int i = 0; i
vector库函数“erase”删除
,使用erase函数后容器size自动-1int removeElement(vector& nums, int detarget) {
for (int i = 0; i < nums.size(); i++){
if(nums[i] == detarget){
nums.erase(nums.begin() + i); // 迭代器与索引的结合
i--; //由于容器size-1,还按原来的i的话相当于自动右移一位而漏掉一个元素
}
}
return nums.size();
}
vector库函数“swap和pop_back()"
,由于pop_back删除的是最后一个元素,所以先移位再删除int removeElement(vector& nums, int detarget) {
for (int i = 0; i < nums.size(); i++){
if(nums[i] == detarget){
swap(nums[i], nums[nums.size() - 1]); //将要删除的元素交换到最后
nums.pop_back();
i--; //这里的i--与上面的作用一样
}
}
return nums.size();
}
string qs = "aa";
vector::iterator iter;
iter = v->begin();
while(iter!=v->end()){
if(!iter->name.compare(qs)){
iter = v->erase(iter);//使用erase返回的迭代器重新赋值iter
}else{
iter++;
}
}