zoukankan      html  css  js  c++  java
  • vector的几小点

    1、vector初始化有一种用法:

    vector<int> a(n,1); 

    表示在a中初始化n个1。

    有时经常会忘记了然后写出了这样的语句:vector<int> a(-1,1) ,发现编译器只是中断程序,却没有报出具体的错误。

      单步调试时,由于这句话在子函数中,也很难调出来。 谨记谨记!!

      具体什么原因:查看了《STL源码》

    发现vector的定义如下:

    vector(size_type n,const T& value)

    {fill_initialize(n,value);}

    再看fill_initialize函数

    void fill_initialize(size_type n,const T& value)

    {

    start=allocate_and_fill(n,value);

    finish =start +n;

    end_of_storage=finish;

    }

    再转allocate_and_fill函数

    iterator allocate_and_fill(size_type n,const T& x)

    {

      iterator result= data_allocator::allocate(n);

    uninitialized_fil_n(result,n,x);

    return result;

    }

    发现allocate中是通过new来分配内存的,new的参数中个数都是无符号数,所以不符合定义。

    2、vector的析构

    vector申请的空间是存在堆中的
    一般析构函数只能释放vector中的元素,并不能释放里面的空间。
    可以用下面这种方法释放:
    1.  vector<int>().swap(arr); //交换后  
    2. //方法二、  
    3. {  
    4.     vector<int> temp;//临时对象未初始化,其缓冲区大小为0,没有数据  
    5.     arr.swap(temp);//与我们的对象交换数据,arr的缓冲区就没了。  
    6. }//临时变量会被析构,temp调用vector析构函数释放空间 
  • 相关阅读:
    【OpenXml】Pptx的边框虚线转为WPF的边框虚线
    C#系列文章索引
    了解LINQ
    【爬虫系列】2. 打开App逆向“潘多拉魔盒”
    Makefile基础
    设计原则 开闭原则
    设计模式 工厂方法模式
    设计原则 接口隔离原则
    设计原则 迪米特法则
    设计原则 单一职责原则
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5276805.html
Copyright © 2011-2022 走看看