c++ vector

在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。

1 基本操作

(1)头文件#include<vector>.

(2)创建vector对象,vector<int> vec;

(3)尾部插入数字:vec.push_back(a);

(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。

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

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

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

(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();

2

vector的元素不仅仅可以使int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。下面是一段简短的程序代码:

复制代码
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;

typedef struct rect
{
    int id;
    int length;
    int width;

  //对于向量元素是结构体的,可在结构体内部定义比较函数,下面按照id,length,width升序排序。
  bool operator< (const rect &a)  const
    {
        if(id!=a.id)
            return id<a.id;
        else
        {
            if(length!=a.length)
                return length<a.length;
            else
                return width<a.width;
        }
    } }Rect;
int main() { vector<Rect> vec; Rect rect; rect.id=1; rect.length=2; rect.width=3; vec.push_back(rect); vector<Rect>::iterator it=vec.begin(); cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl; return 0; }
复制代码

 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的初始化大小和赋初值

 (1)vector< 类型 > 标识符 ; 

(2)vector< 类型 > 标识符(最大容量) ;

 (3)vector< 类型 > 标识符(最大容量,初始所有值);

 vector< int > arry(5, 1); 注:定义一个大小为5的数组,并将每个值都赋为1;

 int i; for( i = 0; i < 5; i ++ ) cout << arry[i] << " "; 输出结果为:1 1 1 1 1 同理定义其他类型的: vector<char> arry(3, '*'); 

定义二维的vector: vector< vector <int>> Arry(10, vector<int>(0));  

 使用数组对C++ Vector进行初始化 int i[10] ={1,2,3,4,5,6,7,78,8} ;   ///第一种   

 vector<int> vi(i+1,i+3); ///从第2个元素到第三个元素  

 for(vector <int>::interator it = vi.begin() ;  it != vi.end() ; it++)  

 {   cout << *it <<" " ;    }     

 vector 的数据的存入和输出:

 #include <iostream> 

#include <vector>

 #include <algorithm> 

#include <cstdlib> 

using namespace std;   

int main(void)

 {    

vector<int> num;   // STL中的vector容器    

int element;     

 // 从标准输入设备读入整数,     

// 直到输入的是非整型数据为止    

while (cin >> element)     //ctrl+Z 结束输入      

  num.push_back(element);      // STL中的排序算法   

 sort(vi.begin() , vi.end()); /// 从小到大     

  reverse(vi.begin(),vi.end()) /// 从大道小         

// 将排序结果输出到标准输出设备   

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

 cout << num[i] << "\n";    //也可以这样做            

   system("pause");  

  return 0; } 


 对于二维vector的定义。 

1)定义一个10个vector元素,并对每个vector符值1-10。

 #include<stdio.h>  

#include<vector> 

#include <iostream> 

using namespace std; 

int main() 

{  

int i = 0, j = 0; //定义一个二维的动态数组,有10行,每一行是一个用一个vector存储这一行的数据。 所 以每一行的长度是可以变化的。之所以用到vector<int>(0)是对vector初始化,否则不能对vector存入元素。 

 vector< vector<int> > Array( 10, vector<int>(0) ); 

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

 {   

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

 {   

 Array[ j ].push_back( i );  

 } 

 } 

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

{   

for( i = 0; i < Array[ j ].size(); i++ )  

 {   

 cout << Array[ j ][ i ] << "  ";  

 }  

 cout<< endl; 

 } 

定义一个行列都是变化的数组。

 #include<stdio.h>

 #include<vector> 

#include <iostream>

 using namespace std; 

void main()

 {  

int i = 0, j = 0;  

vector< vector<int> > Array;  

vector< int > line;  

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

 {  

 Array.push_back( line );//要对每一个vector初始化,否则不能存入元素。 

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

  {    

Array[ j ].push_back( i );  

 } 

 }  

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

 {   

for( i = 0; i < Array[ j ].size(); i++ )  

 {    cout << Array[ j ][ i ] << "  ";   }  

 cout<< endl;  

}

 } 


使 用 vettor erase 指定元素 

#include "iostream"

 #include "vector"  

using namespace std;  

int   main() 

{   

  vector<int>   arr;   

  arr.push_back(6);    

 arr.push_back(8);   

  arr.push_back(3);  

   arr.push_back(8);   

   for(vector<int>::iterator it=arr.begin(); it!=arr.end(); )  

   {       

  if(* it == 8)      

   {           

  it = arr.erase(it);   

      }        

 else     

    {            

 ++it;    

     }    

 }      

cout << "After remove 8:\n";   

   for(vector<int>::iterator it = arr.begin(); it < arr.end(); ++it)   

  {      

   cout << * it << " ";  

   }     

cout << endl;  } 

附:  1.push_back    在数组的最后添加一个数据 

 2.pop_back     去掉数组的最后一个数据  

3.at                 得到编号位置的数据  

4.begin            得到数组头的指针  

5.end              得到数组的最后一个单元+1的指针 

 6.front         得到数组头的引用 

 7.back             得到数组的最后一个单元的引用 

 8.max_size      得到vector最大可以是多大  

9.capacity        当前vector分配的大小  

10.size            当前使用数据的大小  

11.resize          改变当前使用数据的大小,如果它比当前使用的大,者填充默认值 v.resize(2*v.size, 99) 将v的容量翻倍(并把新元素的值初始化为99) 

 12.reserve       改变当前vecotr所分配空间的大小  

13.erase          删除指针指向的数据项  

14.clear           清空当前的vector  

15.rbegin         将vector反转后的开始指针返回(其实就是原来的end-1)  

16.rend           将vector反转构的结束指针返回(其实就是原来的begin-1)  

17.empty         判断vector是否为空  

18.swap          与另一个vector交换数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值