码迷,mamicode.com
首页 > 其他好文 > 详细

【技术向】vector容器的用法

时间:2015-05-31 10:45:20      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

部分转自:http://www.cnblogs.com/wang7/archive/2012/04/27/2474138.html

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

1. 初始化   

1 vector <Elem>                 // 创建一个空的vector。
2 vector <Elem> c1(c2)          // 复制一个vector
3 vector <Elem> c(n)            // 创建一个vector,含有n个数据,数据均已缺省构造产生
4 vector <Elem> c(n, elem)      // 创建一个含有n个elem拷贝的vector
5 vector <Elem> c(beg,end)      // 创建一个含有n个elem拷贝的vector

部分成员函数

c.back()      // 传回最后一个数据,不检查这个数据是否存在。
c.begin()     // 传回迭代器中的第一个数据地址。
c.capacity()  // 返回容器中数据个数。
c.clear()     // 移除容器中所有数据。
c.empty()     // 判断容器是否为空。
c.end()       // 指向迭代器中末端元素的下一个,指向一个不存在元素。
c.erase(pos)  // 删除pos位置的数据,传回下一个数据的位置。
c.erase(beg,end)  //删除[beg,end)区间的数据,传回下一个数据的位置。
c.front()     // 传回第一个数据。

 

2 基本操作

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

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

  (3)尾部插入数字:vec.push_back(a);(曾经还有push_back但是我不知道为什么不能用了)

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

3

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; }
技术分享

 4  算法

  (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),这样就降序排序

5.使用细节

(1)vector的扩充机制:按照容器现在容量的一倍进行增长。vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加,而是重新申请一块更大的新内存,并把现有容器中的元素逐个复制过去,然后销毁旧的内存。这时原有指向旧内存空间的迭代器已经失效,所以当操作容器时,迭代器要及时更新。

【技术向】vector容器的用法

标签:

原文地址:http://www.cnblogs.com/oierforever/p/4541533.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!