【技术向】vector容器的用法

部分转自: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容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加,而是重新申请一块更大的新内存,并把现有容器中的元素逐个复制过去,然后销毁旧的内存。这时原有指向旧内存空间的迭代器已经失效,所以当操作容器时,迭代器要及时更新。

时间: 2024-12-15 06:54:24

【技术向】vector容器的用法的相关文章

vector容器的用法以及动态数组

vector容器不必去管大小 string申明的数组已经是动态的了 若是int类型的话,需要 cin>>N: int a[N]会出错 ,必须是int *p = new int[N] 然后再手动释放空间

vector容器经常用法

容器简单介绍 定义及初始化 末尾插入元素 遍历 size 函数是能够动态添加的 通过下标操作添加改变vector内容不是安全的操作 仅能对已存在元素进行下标操作不存在会crash 将元素一个容器复制给另外一个容器类型必须匹配容器类型和元素类型必须同样 迭代器简单介绍 定义 begin和end操作 迭代器的自增和解引用操作 迭代器的算术操作 const_iterator 仅仅读 高级使用方法 容器元素类型必须满足例如以下两个约束 顺序容器的操作 加入元素的操作 避免存储end操作返回的迭代器 关系

vector容器用法详解

vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化. vector类常用的函数如下所示: 1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize vector(int nSize,const t& t):创建一个vector,元

STL之二:vector容器用法详解

转载于:http://blog.csdn.net/longshengguoji/article/details/8507394 vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化. vector类常用的函数如下所示: 1.构造函数 vector():创建一个空vector vector(int nSize)

C++STL中vector容器 begin()与end()函数、front()与back()的用法

一.begin函数 函数原型: iterator begin(); const_iterator begin(); 功能: 返回一个当前vector容器中起始元素的迭代器.   二.end函数 函数原型: iterator end(); const_iterator end(); 功能: 返回一个当前vector容器中末尾元素的迭代器.   三.front函数 函数原型: reference front(); const_reference front(); 功能: 返回当前vector容器中起

标准模板库(STL)学习探究之vector容器

标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据.为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>构造函数. Vectors 包含着一系列连续存储的元素,其行为和数组类

C++ 容器的用法

C++中的容器类包括"顺序存储结构"和"关联存储结构",前者包括vector,list,deque等是线性的:后者包括set,map,multiset,multimap等则能够通过key访问元素,multimap,multiset 允许一个key对应多个元素,这和数学中的映射道理一样,完全映射,多重映射....下面介绍一下map的使用,其他的使用方法类似. 一.map的说明 1   头文件 #include   <map> 2   定义 map<s

STL源码之实现一个简易的Vector容器

STL源码之实现一个简易的Vector容器 这里需要的基础知识主要是类模板和函数模板,以及一个C++内存分配的技术allocator类,它提供可感知类型的内存分配,这个类支持一个抽象接口,以分配内存并随后使用该内存保存对象. 使用allocator类,首先应用allocator类建立一个allocator对象,然后使用该对象你可以分配内存,释放内存,构造你需要的对象,释放不要的对象. template<class T>allocator<T> Vector<T>::al

vector库的用法

C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头文件:#include <vector>.vector 是一个类模板.不是一种数据类型,vector<int>是一种数据类型.Vector的存储空间是连续的,list不是连续存储的. 一. 定义和初始化vector< typeName > v1;       //默认v1为