vector

来源:互联网 发布:js调用java代码 编辑:程序博客网 时间:2024/05/01 13:51
vector向量容器(动态数组)
vector不但可以像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单高效的的容器,
完全可以代替数组。

值得注意的是,vector具有内存自动管理的功能,对于元素的插入和删除,可动态调整所占的内存空间。
vector容器的下标是从0开始,和数组有很多相似之处,但它比数组更灵活。
下面是vector的常用方法:
#include<vector>
创建
vector<in_type>vec;
vector<class>vec(10);
vector<double>vec(10,8.6);

元素扩张
push_back(type);

迭代器 以及 遍历工具
vector<type>::iterator it;
*it可以访问元素的内容
begin() and end()

元素插入以及删除函数
insert(vec.begin()+2,type);
erase(vec.begin()+1);//删除一个
erase(vec.begin()+1,verbegin()+5);//删除一段
clear();//清空之后size变为0

reverse()反向排列算法
reverse( vec.begin(),vec.end() );//反向排列

sort()算法
sort()算法要求使用随机访问迭代器进行排序,在默认情况下,对元素进行升序排列。
sort( vec.begin(),vec.end() );//从头到尾  从小到大排列
bool comp(tpye a,tpye b);//自动定义比较函数,可以改变排序方法
sort(vec.begin(),vec.end(),comp);//自定义的比较方式

向量的大小
vec.size();//
vec.empty();//

编程范例1:使用迭代器遍历所有元素,然后输出所有元素之和

#include<iostream>
#include<vector>
#include<numeric>
using nmaespace std;

int main()
{
   vector<int>v;
   int i;
   for(i=0;i<10;i++)
       v.push_back(i);
   //定义迭代器,然后遍历所有元素
   vector<int>::iterator it;
   for(it=v.begin();it!=v.end;it++)
       cout<<*it<<endl;
   cout<<endl;
   //统计所有元素之和,然后输出
   cout<<accumulate(v.begin(),v.end(),0)<<endl;
   return 0;
}

编程范例2:定义以及扩张元素(还有下表式访问元素)

#include<iostream>
#include<vector>
using namespace std;

struct node
{
    int data;
};

int main()
{
   vector<node>v;
   vector<int>v1;
   vector<int>v2(10);
   vector<int>v3(10,5);//空间为10,元素全部是5
   for(int i=0;i<10;i++)
   {
      v1.push_back(i);
      v2[i]=v2[i];
   }
   for(int i=0;i<10;i++)
   {
      cout<<v1[i]<<'\t'<<v2[i]<<'\t'<<v3[i]<<endl;
   }
   cout<<v1.size()<<'\t'<<v2.zise()<<endl;
   return 0;
}

编程范例3://元素删除

#include<iostream>
#include<vector>
using namespace std;

int main()
{
    vector<int>v(10);
    for(int i=0;i<10;i++)
    {
       v[i]=i;
    }
    v.erase(v.begin()+2);
    vector<int>::iterator it;
    for(it=v.begin();it!=v.end();i++)
    {
        cout<<*it<<" "<<endl;
    }
    v.erase(v.begin()+1,v.begin()+5);//删除四个元素
    for(it=v.begin(),it!=v.end(),it++)
    {
        cout<<*it<<" "<<endl;
    }
    v.clear();
    cout<<v.size()<<endl;
    return 0;
}

编程范例4:反向遍历算法

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
   vector<int>v(10);
   for(int i=0;i<10;i++)
       v[i]=i;
   for(int i=0;i<10;i++)
       cout<<v[i]<<" ";

   reverse( v.begin(),v.end() );//将元素反向存储
   vector<int>::iterator it;
   for(it=v.begin();it!=v.end();i++)
       cout<<*it<<" ";

   cout<<endl;
   return 0;
}

编程范例5,6:sort算法对向量进行排序
默认情况下进行升序排序,然而可以通过自定义比较函数
来改变排序方式,如果使用结构体,则必须自定义比较函数.

the easy one:

#include<iostream>
#include<vector>
#include<algorithm>

int main()
{
   vector<int>v;
   int i;
   for(i=0;i<10;i++)
      v.push_back(9-i);
   for(i=0;i<10;i++)
      cout<<v[i]<<" ";
   cout<<endl;
   sort( v.begin(),v.end() );
   for(i=0;i<10;i++)
      cout<<v[i]<<" ";
   
   cout<<end;
   return 0;
}

the more useful:

#include<vector>
#include<iostream>
#include<algorithm>
using namespae std;

bool Comp(const int a,const int b)
{
   return a>b;
}

int main()
{
   vector<int>v;
   int i;
   for(i=0;i<10;i++)
   {
      v.push_back(i);
   }
   for(i=0;i<=9;i++)
      cout<<v[i]<<" ";
   cout<<endl;

   sort(v.begin(),v.end(),Comp);
   for(i=0;i<10;i++)
      cout<<v[i]<<" ";
   cout<<endl;
   return 0;
}
0 0