STL_VECTOR容器的一个简单函数手册

stl容器中我挺喜欢用vector的,因为他本身就是数组啊~提高编程效率。当然了,如果经常需要插入删除的话还是推荐用list

刚开始用stl的时候就查查这个简陋的东西,感觉非常够用,而且很清晰。

------------------------------------------------------------------

vector介绍 

    实际上就是个动态数组。随机存取任何元素都能在常数时间完成。在尾端增删元素具有较佳的性能。

为了可以使用vector,必须在你的头文件中包含下面的代码:#include<vector>

 

一、 定义和初始化

Vector<int> v;      //默认构造函数v为空

Vector<T> v2(v);   //v2是v的一个副本

Vector<T> v3(n,i);   //v3包含n个值为i的元素

Vector<T> v4(n);    //v4含有n个值为0的元素

二、Vector对象最重要的几种操作

1.    v.size()                    当前使用数据的大小

2.    v.empty()                  判断vector是否为空

3.    v[n]                       返回v中位置为n的元素

4.    v1=v2                     把v1的元素替换为v2元素的副本

5.    v1= =v2                    判断v1与v2是否相等

6.    !=、<、<=、>、>=      保持这些操作符惯有含义

7.    v.push_back(t)            在数组的最后添加一个值为t的数据

v.push_back(1);         //把1和2压入vector 这样v[0]就是1,v[1]就是2

   v.push_back(2);

8.    v.pop_back();             // 弹出容器中最后一个元素(容器必须非空)

9. 我们可以用一个迭代器:  vector<int>::iteratoriter=v.begin();//定义一个可以迭代int型vector的迭代器iter,它指向v的首位

  while(;iter!=v.end();iter++)cout<<(*iter);//iter++指的是向前迭代一位,直到iter到超出末端迭代器为止,输出迭代器指向的值

三、c++ vector使用demo

#include <iostream>

#include <vector>    //包含vector

using namespace std;  //指定命名空间

int main()

{

cout<<"----------vectortest-----------"<<endl;

 

/

//定义一个vector

/

vector <int> vect;

vector <int> vect1(12);//12个int类型元素,每个元素的初始值均为0

vector <int> vect2(12,9);//12个int,初试值均为9

 

/

//使用数组初始化vector

/

int a[]={0,1,2,3,4,5,6,7,8,9,0};

//vector <数据类型> <容器名> (<开始地址>,<结束地址的下一个地址> )。执行过vt中元素为1,2,3

vector <int> vt(a+1,a+4);

//在尾部压入3个值

vt.push_back(1);

vt.push_back(2);

vt.push_back(3);

//定义迭代器iterator

vector <int>::iterator iter=vt.begin();//起始地址

vector <int>::iterator iter_end=vt.end();//结束地址,两个地址都是指针类型

//遍历vt

for(;iter!=iter_end;iter++)

{

  cout<<*iter<<endl;

}

 

///

//弹出一个元素

///

vt.pop_back();//执行弹出

//以下两行重新获得起始和结尾地址

iter=vt.begin();

iter_end=vt.end();

cout<<"----------executedpop_back------"<<endl;

for(;iter!=iter_end;iter++)

{

  cout<<*iter<<endl;

}

 

//插入元素

cout<<"----------insertinto------------"<<endl;

//插入格式:vector.insert(<起始地址>,<插入的数量>,<元素值>);如果插入的数量为1,则第二个参数可以被省略

vt.insert(vt.begin()+1,3,9);

iter=vt.begin();

iter_end=vt.end();

for(;iter!=iter_end;iter++)

{

  cout<<*iter<<endl;

}

 

//删除元素

///

cout<<"----------erase-------------------"<<endl;

//删除格式1为:vector.erase(<删除元素的地址>);

//删除格式2为:vector.erase(<删除元素的起始地址>,<终止地址>);

iter=vt.begin();

iter_end=vt.end();

vt.erase(iter+1,iter_end);//删除第二个到最后一个的元素

iter_end=vt.end();

for(;iter!=iter_end;iter++)

{

  cout<<*iter<<endl;

}

return 0;

}

 

函数

表述

c.assign(beg,end)

c.assign(n,elem)

将[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,beg,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)

将c1和c2元素互换。同上操作。

 

可以使用reverse反向排列算法。需要定义头文件“#include <algorithm>”

reverse(v.begin(),v.end());

使用sort算法进行排序,默认情况下,对向量进行升序排列。

sort(v.begin(),v.end());

自己设计排序比较函数,按指定的规则进行排序

bool comp(constint &a,const int &b)

{

       if (a!=b) return a>b;

    else return a>b;

}

sort(v.begin(),v.end(),comp);

举例:

#include<algorithm>

#include<vector>

#include<iostream>

using namespacestd;

bool cmp( int a,int b ) 

{ return a > b;}           

 

int main()

{

       vector<int> v1;

       v1.push_back(23); 

    v1.push_back(-1);

    v1.push_back( 9999 );

    v1.push_back( 0 ); 

    v1.push_back( 4 );           

    cout << "Before sorting: ";

    for(int i = 0; i < v1.size(); i++ ) 

              cout << v1[i] <<" ";  

       cout << endl;            

    sort( v1.begin(), v1.end() );         

    cout << "After sorting: "; 

    for( i = 0; i < v1.size(); i++ ) 

              cout << v1[i] <<" ";

       cout << endl;    

       vector<int> v2; 

       for( i = 0; i < 10; i++ ) 

       {  

              v2.push_back(i); 

       }               

       cout << "Before: "; 

       for( i = 0; i < 10; i++ ) 

       {  

              cout << v2[i] <<" ";

       } 

       cout << endl;             

       sort( v2.begin(), v2.end(), cmp );                

       cout << "After: "; 

       for( i = 0; i < 10; i++ ) 

       {  

              cout << v2[i] <<" ";

       } 

       cout << endl; 

       return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值