vector

来源:互联网 发布:js判断是否等于 编辑:程序博客网 时间:2024/06/05 20:22

小白也是为了学opencv机器视觉库才接触c++的,因此小白vector的用处也是相当的多的。

vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

Vector基本操作:

1.头文件:

           #include<vector>

2.创建vector对象,vector的元素不仅仅可以使int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。

          Vector <int> vint;

3.在尾部插入元素:

         vint.push_back(elem);

4.使用下标访问元素:xia

         cout<< vint[0] <<endl;            //下标从0开始

(5)使用迭代器访问元素.

vector<int>::iterator it;for(it=vint.begin();it!=vint.end();it++)    cout<<*it<<endl;

(6)插入元素:    vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;

            注意:在vector插入元素时,insert效率可能是最低的(末尾插入除外),因为在开头或者中间插入元素时都会导致后面的元素后移,所以会影响效率,首选push_back();

(7)删除元素:    vec.erase(vec.begin()+2);删除第3个元素

vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

(8)向量大小:vec.size();

(9)清空:vec.clear();

 3  算法

(1) 使用reverse将元素翻转:需要头文件#include<algorithm>

reverse(vec.begin(),vec.end());将元素翻转(在vector中,如果一个函数中需要两个迭代器,

一般后一个都不包含.)

(2)使用sort排序:需要头文件#include<algorithm>,

sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).

可以通过重写排序比较函数按照降序比较,如下:

定义排序比较函数:

bool Comp(const int &a,const int &b)
{
    return a>b;
}
调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。

Vector成员函数

函数

表述

vec.assign(beg,end)

vec.assign(n,elem)

将【beg; en】区间中的数据赋值给c。

将n个elem的拷贝赋值给vec。

vec.at(idx)

传回索引idx所指的数据,如果idx越界,抛出out_of_range

vecc.back()

传回最后一个数据,不检查这个数据是否存在。

vec.begin()

传回迭代器重的可一个数据。

vec.capacity()

返回容器中数据个数。

vec.clear()

移除容器中所有数据。

vec.empty()

判断容器是否为空。

vec.end()

指向迭代器中的最后一个数据地址。

vec.erase(pos)

vec.erase(beg,end)

删除pos位置的数据,传回下一个数据的位置。

删除[beg,end)区间的数据,传回下一个数据的位置

vec.front()

传回第一个数据。

get_allocator

使用构造函数返回一个拷贝。

vec.insert(pos,elem)

vec.insert(pos,n,elem)

vec.insert(pos,beg,end)

pos位置插入一个elem拷贝,传回新数据位置。

pos位置插入n个elem数据。无返回值。

pos位置插入在[beg,end)区间的数据。无返回值。

vec.max_size()

返回容器中最大数据的数量。

vec.pop_back()

删除最后一个数据。

vec.push_back(elem)

在尾部加入一个数据。

vec.rbegin()

传回一个逆向队列的第一个数据。

vec.rend()

传回一个逆向队列的最后一个数据的下一个位置。

vec.resize(num)

重新指定队列的长度。

vec.reserve()

保留适当的容量。

vec.size()

返回容器中实际数据的个数。

vec1.swap(vec2)

swap(vec1,vec2)

将vec1和vec2元素互换。

同上操作。

vector<Elem> vec

vector <Elem> vec1(vecc2)

vector <Elem> vec(n)

vector <Elem> vec(n, elem)

vector <Elem> vec(beg,end)

vec.~ vector <Elem>()

创建一个空的vector

复制一个vector

创建一个vector,含有n个数据,数据均已缺省构造产生

创建一个含有n个elem拷贝的vector

创建一个以[beg;end)区间的vector

销毁所有数据,释放内存。

0 0