版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Qin7_Victory/article/details/88936595
一 创建vector对象 (注: 下面的测试例子是根据一组数据依次实现的)
1. 不指定容器的元素个数
vector<int> v;
2. 指定容器的大小(例如定义一个用来存储10个double类型元素的向量容器)
vector<double> v1(10);
3. 创建n个元素向量容器,并赋值 (例如 定义一个v2向量容器,共有10个元素,每个元素的值为8.6)
vector<double> v2(10,8.6);
二 尾部元素扩张 push_back()
尾部追加元素,vector容器会自动分配内存空间,可对空的vector对象扩张,也可对已有元素的vector对象扩张。
for(int i = 1; i < 10; i++)
v.push_back(i);
三 元素的插入 insert()
1. insert()方法可以在vector()对象的任意位置前插入一个新元素,同时vector自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置。
2. insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。
- 在最前面插入新元素
v.insert(v.begin(),11); (例如 11 1 2 3 4 5 6 7 8 9)
- 在第2个元素前插入一个新元素 (下标是从0开始的)
v.insert(v.begin()+2,12); (例如 11 1 12 2 3 4 5 6 7 8 9)
- 在向量末尾追加新元素
v.insert(v.end(),13); (例如 11 1 12 2 3 4 5 6 7 8 9 13)
四 元素的删除
1. erase() 方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素
- 删除vector迭代器所指的一个元素
v.erase(v.begin()+2); (例如 11 1 2 3 4 5 6 7 8 9 13)
- 删除一段区间中的所有元素(左闭右开)
v.erase(v.begin()+2,v.begin()+5); (例如 11 1 5 6 7 8 9 13)
2. clear() 方法一次性删除vector中的所有元素
v.clear();
五 反向排列
- 将向量中某段迭代器区间反向排列
reverse(v.begin()+2,v.end()); (例如 11 1 13 9 8 7 6 5)
六 排序 (需要声明头文件 #include<algorithm> )
可以自己设计排序比较函数,然后把这个函数指定给sort算法
- const定义的变量是不变的, &表示进行参数传递,函数内数值改变,函数结束后,原值也改变
bool cmp(const int &a, const int &b)
{
return a < b; //如果要从大到小排序,用" > "号
}
sort(v.begin(),v.end(),cmp); //sort()默认是从小到大排序
七 向量的大小
1. size()方法 可以返回向量的大小,即元素的个数
- v.size()
2. empty()方法 返回向量是否为空 (如果非空,则返回逻辑假,即为0 否则返回逻辑真 即 1)
- v.empty()
八 迭代器访问
1. 迭代器类型一定要与它要遍历的向量容器(vector)对象的元素类型一致
2. 迭代器配合循环语句进行遍历访问
- 定义迭代器变量
vector<int>::iterator it;
-迭代器访问
for(it = v.begin(); it != v.end(); it++)
cout << *it << " ";
cout<<endl;
九 求和 (需要声明头文件 #include<numeric>)
- accumulate算法统计所有元素的和
accumulate(v.begin(),v.end(),20) //后面的常数a可以理解为初始值sum = a;
测试代码如下
#include<stdio.h>
#include<vector>
#include<numeric> //accumulate 算法需要
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(const int &a, const int &b) //const定义的变量是不变的
//&表示进行参数传递,函数内数值改变,函数结束后,原值也改变
{
return a < b;
}
int main()
{
//创建vector元素对象
vector<int> v;
//不指定容器的元素个数
vector<double> v1(10);
//指定容器的大小
vector<double> v2(10,8.6);
//创建n个元素向量容器,并赋值
for(int i = 1; i < 10; i++)
v.push_back(i);
//尾部元素扩张赋值
//元素的插入
v.insert(v.begin(),11);
//insert()方法是在vector对象前的任意位置前插入一个新的元素
v.insert(v.begin()+2,12);
//插入的位置是元素迭代器的位置,而不是元素的下标
v.insert(v.end(),13);
//11 1 12 2 3 4 5 6 7 8 9 13
//元素的删除
//删除vector迭代器所指的一个元素
v.erase(v.begin()+2);
// 11 1 2 3 4 5 6 7 8 9 12
//删除一段区间中的所有元素(左闭右开)
v.erase(v.begin()+2,v.begin()+5);
//11 1 5 6 7 8 9 13
v.clear();
//一次性删除所有的元素
reverse(v.begin()+2,v.end());
//将向量中某段迭代器区间反向排列
//11 1 13 9 8 7 6 5
sort(v.begin(),v.end(),cmp);
//升序排序
cout<<v.size()<<endl;
//输出向量的大小
cout<<v.empty()<<endl;
//输出向量是否为空
vector<int>::iterator it;
//定义迭代器变量
for(it = v.begin(); it != v.end(); it++) //迭代器访问
cout << *it << " ";
cout<<endl;
cout<<accumulate(v.begin(),v.end(),20)<<endl; //求和
return 0;
}