c++向量

来源:互联网 发布:图片剪切软件下载 编辑:程序博客网 时间:2024/05/17 07:51

内容综合整理自:http://www.cnblogs.com/mr-wid/archive/2013/01/22/2871105.html

                                http://blog.csdn.net/rocispeng/article/details/7958358

向量(vector)

一、接口与实现

向量:数组的抽象与泛化,由一组元素按线性次序封装而成各元素与[0,n)内的秩一一对应

           元素的类型不限于基本类型

           操作、管理和维护更加简化、统一与安全

           可更为便捷地参加复杂数据结构的定制与实现

操作功能适用对象size()报告向量当前的规模(元素总数)向量get(r)获取秩序为r的元素向量put(r,e)用e替换秩为r元素的数值向量insert(r,e)e作为秩为r元素插入,原后继元素一次后移向量remove(r)删除秩为r的元素,返回该元素中原存放的对象向量disordered()判断所有元素是否已按非降序排列向量sort()调整各元素的位置,使之按非降序排列向量search(e)查找目标元素e,返回不大于e且秩最大的元素有序向量deduplicate()剔除重复元素向量uniquify剔除重复元素有序向量traverse遍历向量并做统一处理所有元素,处理方法由函数对象指定向量find(e)查找目标元素e向量

二、向量

vector是c++标准程序库中的一个类,可视为会自动扩展容量的数组,以循序(Sequential)的方式维护变量集合。vector的特色包括支持随即存取,在集合尾端增删元素很快,但是在集合中间增删元素比较费时。vector是c++标准程序库中的众多容器之一,除此之外还有list、set、map、...等等。vector以模板(泛型)方式实现,可以储存任何类型的变量,包括用户自定义的数据型态,例如:它可以是放置整数(int)型态的vector、也可以是放置字符串(string)型态的vector,活着放置用户自定类型(user-defined class)的vector。
vector定义于<vector>头文件中,与其他STL组建一样,vector属于std命名空间
vector是c++标准程序库里最基本的容器,大多数情况下都很有效率。vector设计之处即是为了改善C语言原生数组的种种缺失与不便,而提供一种更有效、更安全的数组。vector的使用接口可以模拟C语言原生数组,较明显的差异在于储存器管理,原生数组必须在声明数组的时候明确指定数组长度(例如 int a[5]),但是vector不需要指定,而是会在运行期依据状况自我调整长度,动态增大容量
vector的表现一如数据结构中的数组,允许随即存取,以索引值访问任一元素只要花费常数时间O(1),若在vector集合中间增加或删除元素时间复杂度是线性时间O(n),较为费时。虽然C++标准并没有规定实现方式,但大多数vector内部均使用动态数组方式实现。

有点点像Java里的arrylist有没有嘿嘿  “不*明*真*相的围*观群*众” 槑槑槑槑呆槑槑槑槑槑槑槑槑……

三、使用说明

声明

使用vector之前,必须先 #include<vector>
声明一个vector变量的方法如下:
  std::vector<T>v;
T是vector要存储的对象集合的类型,该vector的变量名称是v。T可以是任何符合Assignable条件的类型,包或用户自定义类型。如果T不符合Assignment或者复制成本很高昂,可以考虑使用T*来代替T

取代数组使用:

 
#include <iostream>#include<vector>using namespace std;int main(){    std::vector<int> v;//T即是贴出相应的向量类型    v.push_back(1);//=======>v[o]==1    v.push_back(2);    v.push_back(3);    for(int i=0;i<3;i++)    {        std::cout<<v[i]<<std::endl;    }}

vector 有四种定义方式:
    1.vector<int> a(10);    //定义了10个整数元素的向量,但没有给出初值,因而其值是不确定的
    2.vector<int>b(10,1)   //定义了10个整数元素的向量,并且给每个元素的初值赋值为1
    3.vector<int>c(b)        //用另一个线程的向量来创建一个向量
    4.vector<int>d(b.begin(),b.begin()+3);    //定义了其值依次为b向量中第0到第2个(共三个)元素的向量

长度/容量

#include <iostream>#include<cstdlib>#include<vector>#include<iomanip>#define SETW_1 10#define SETW_2 6#define SETW_3 10using namespace std;typedef vector<int> Vint;void PrintVectorInfo(Vint& v){    cout<<setw(SETW_1)<<"Element"<<setw(SETW_2)<<"Size"<<setw(SETW_3)<<"Capacity"<<endl;//setw()只是起了一个对齐的作用    //capacity容量    for(Vint::iterator it=v.begin();it !=v.end();it++)//iterator是向量中的遍历器    /* 然而现在还是不太懂下面这段代码是可以替代的么    for(int i=0;i<v.size();++i) cout<<v[i]<<" ";    */        {          cout<<setw(SETW_1)<<(*it)<<setw(SETW_2)<<v.size()<<setw(SETW_3)<<v.capacity()<<endl;        }        cout<<endl;}int main(int argc,char** argv){    //宣告一个vector    Vint vint;    //宣告两个整数变数    int a=11,b=22,c=33;    //建立只有一个元素空间的vint    //把变数a复制至第一个元素内    vint.push_back(a);    cout<<"Push Back:a="<<a<<endl;    //建立两个元素空间的vint    //把变数a复制至第一个元素内    //把变数b复制至第二个元素内    //删除上一次建立的vint    //上次建立的vint只有一个元素空间    //依此类推    vint.push_back((b));    cout<<"Push Back:b="<<b<<endl;    vint.push_back(c);    cout<<"Push Back:c="<<c<<endl;    PrintVectorInfo(vint);    //移除最后一个元素    vint.pop_back();    cout<<"Pop Back......"<<endl;    PrintVectorInfo(vint);    //清除所有元素    vint.clear();    cout<<"Clear All Elements."<<endl;    //=END=//    return 0;}



0 0