• 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析构函数释放空间 
  • 相关阅读:
    vue组件传值
    mui父子页面蒙版
    mui页面传值
    mui跳转页面短暂白屏
    Sql 向数据库中添加一行数据
    redis启动报错 no config file specified, using the default config.
    C# 合并表达式树
    .net从集合中取出下拉框类型值数据
    jquery从数组中取出满足要求的元素
    RabbitMQ Topic交换机代码实现
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5276805.html
Copyright © 2020-2023  润新知