- vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
- 必须包含头文件#include,全局命名域方式using namespase std;
- vector使用方式
(1) vector c,c;
(2) vector c(n);//定义已知长度的向量,类似于int a[10]; - vector初始化
(1) vector c(10);//定义长度为10的整型向量,初始值随机;
(2) vector c(10,1);// 定义长度为10的整型向量,初始值都为1;
(3) vector c(b);//用b向量创建c向量,整体复制性赋值;
(4) vector c(b.begin(),b.begin()+3);//定义向量a,为b中的第0个元素到第2个元素; - 成员函数
函数 | 表述 |
---|---|
c.assign(b.begin(),b.end());c.assign(n,elem) | 将b向量[beg;end)区间的数据赋值给c;将n个值为elem的拷贝赋值给c |
c.at(idx) | 传回索引idx所指的数据,如果idx越界,抛出out_of_range |
c.back() | 传回最后一个数据,不检查这个数据是否存在。 |
c.begin() | 传回迭代器中的第一个数据。 |
c.capacity() | 返回容器中数据个数。 |
c.clear() | 移除容器中所有数据。 |
c.empty() | 判断容器是否为空。 |
c.end() | 指向迭代器中的最后一个数据地址。 |
c.erase(pos); c.erase(beg,end) | 删除pos位置的数据,传回下一个数据的位置。 删除[beg,end)区间的数据,传回下一个数据的位置。 |
c.front() | 传回第一个数据。 |
get_allocator | 使用构造函数返回一个拷贝。 |
c.insert(pos,elem) ; c.insert(pos,n,elem); c.insert(pos,b.begin(),b.end()) | 在pos位置插入一个elem拷贝,传回新数据位置。 在pos位置插入n个elem数据。无返回值。 在pos位置插入在[beg,end)区间的数据。无返回值。 |
c.max_size() | 返回容器中最大数据的数量。 |
c.pop_back() | 删除最后一个数据。 |
c.push_back(elem) | 在尾部加入一个数据。 |
c.rbegin() | 传回一个逆向队列的第一个数据。 |
c.rend() | 传回一个逆向队列的最后一个数据的下一个位置。 |
c.resize(num) | 重新指定队列的长度。 |
c.reserve() | 保留适当的容量。 |
c.size() | 返回容器中实际数据的个数。 |
c1.swap(c2) ; swap(c1,c2) | 将两个向量的元素整体互换。 同上操作。 |
vector c; vector c1(c2); vector c(n); vector c(n, elem); vector c(beg,end); c.~ vector () | 创建一个空的vector。 复制一个vector。 创建一个vector,含有n个数据,数据均已缺省构造产生。 创建一个含有n个elem拷贝的vector。 创建一个以[beg;end)区间的vector。 销毁所有数据,释放内存。 |
- 添加\读取\删除元素
(1) a.push_back(num);//向量尾部添加元素
(2) 从数组中选取元素放入向量
int a[5] = {1,2,3,4,5};
vector vec(a,a+5);
(3) Btemp.erase(find(Btemp.begin(),
Btemp.end(), Ob_1));// vector类型需要先找到元素的位置,再使用删除函数
Btemp.erase(Ob_1);//set类型的删除函数,只需要写具体元素值
(4) cout<<a[i];//输出向量a的第i个元素,注意,只有向量里面存在元素时,才能使用下标的方式进行读取,不能用下标的方式进行赋值。
(5) vector::iterator it;//迭代器方式读取向量元素
it=c.begin();
cour<<*it; - 相关算法使用
(1) 需要包含头文件#include
(2) sort(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列
sort自定义排序,定义比较函数,然后将函数名作为sort函数的参数传入。
bool Compare();
sort(c.begin(),c.end(),Compare);
(3) reverse(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
(4) copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
(5) find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置