stl-vector

来源:互联网 发布:淘宝上的衣服能买吗 编辑:程序博客网 时间:2024/06/14 06:12

 vector的基本操作

vector的长度根据需要自动改变。

vectore<typename> name;定义vector

vectore<typename> name(n,x);可以将vector初始化为nx;

name.push_back();添加元素,时间复杂度O1

name.pop_back();删除元素;O1

name.size();获得元素个数;O1

name.clear();清空vector中的所有元素;

name.insert(it,x);向迭代器it处插入一个元素xON

neme.erase(it);删除迭代器为it的元素。ON

name.erase(it1,it2);删除两个迭代器内的元素。ON

注意:迭代器与指针不同,删除后此迭代器不在存在,一般无法对删除过得迭代器进行操作,可以这样it=neme.erase(it);删除it迭代器并指向下一个迭代器;但是有的编译器会因为vector是线型容器自动指向下一元素;建议使用it=neme.erase(it);操作;

name1.swap(name2);name1name2交换;

name1=name2;当name1name2类型相同的话(例:都为int)可以直接赋值;

name1assign(it1,it2);name清空,然后将it1it2迭代器中的元素拷贝给name(遇上面直接复制的区别在与可以拷贝不同类型的vector,列如把一个char拷贝给int类型,则相当于把int当做ascii码值赋给char)

2vector的排序

vector可以用sortreverse对迭代器进行排序和颠倒。

Vector存结构体的时候可以用sort自写函数排序。

使用sort从大到小排序时可以直接调用函数 sort(it1,it2,greater<typename>() );排序

 

3vector元素的访问:

通过下标访问:

name[index],例如name[0],name[0],但若是访问到不存在的元素会乱出结果。

name.at(i);与上面一样,但若是访问到不存在元素会报错。

通过迭代器访问:

定义迭代器:vectore<typename>::iteratorit;

第一个元素的迭代器:it.begin();

最后一个元素后面一位的迭代器:it.end();

Vectore的迭代器可以进行it=it+i的操作;

4、反转向迭代器的定义和运用

     vector<typename>::reverse_iteratorit;定义反向迭代器

    name.rbegin();最后一个元素

name.rend();第一个元素前面的迭代器

可以用name.rbegin();代替name.end()-1;操作

具体应用如下:

#include<iostream>#include<vector>using namespace std;int main(){vector<int> s;vector<int>::reverse_iterator it1;vector<int>::iterator it;s.push_back(1);s.push_back(2);s.push_back(3);/*for(it=s.end()-1;it>=s.begin();it--)cout<<*it<<" ";cout<<endl;这种情况到达s.begin的时候it--在执行一次,程序有可能崩掉*/for(it1=s.rbegin();it1!=s.rend();it1++)cout<<*it1<<" ";cout<<endl;/*输出结果 3 2 1 */ }