c++向量

内容综合整理自: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 10
using 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;
}



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值