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析构函数释放空间 
  • 相关阅读:
    蝴蝶书学习笔记
    Cordova + Vue开发混合app调研
    CodePush使用调研
    为备考二级C语言做的代码练习---辅导资料《C语言经典编程282例》--(1)
    C语言日期计算器
    Msfvenom 学习笔记与总结
    C语言 包含结构的结构
    C语言 结构体作为函数的参数
    C语言 指向结构体数组的指针
    C语言 指向结构体变量的指针
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5276805.html
Copyright © 2011-2022 走看看