11/7/1 Vector(1)

STL:标准模板库。包括:标准类,函数模板

六术语:

1.容器:用来存储和组织其他对象的对象。

       例如:链表类,又如:vector 容器

             优点:自动管理内存

共有六种容器:

vector , deque , list , map , set , bitset

2.容器适配器

包装了现有STL模板,实现更加的功能

例如:queue 和 stack

3.迭代器

行为与指针相似,类型是    容器<>::iterator

  1. 分为:

    输入(只读)输出(只写)迭代器,前向迭代器,双向迭代器,随机访问迭代器

4.算法

函数模板,操作迭代器提供的对象

头文件有 ,

5.函数对象

重载()运算符,实现 operator()()的函数

谓词:返回 bool 类型值得函数。分为两类:单操作数 和 双操作数

头文件

6.函数适配器

 


 

矢量容器 使用实例:

涉及的几个函数:

1.begin() 返回指向第一个元素的迭代器

2.end()  返回指向最后一个元素的下一个位置的迭代器

3.rbegin() 返回指向最后一个元素的迭代器,类型 reverse_iterator

4.rend() 返回指向第一个元素的下一个位置的迭代器,类型同 rbegin(),

   特别注意 对象.rend()-1 指向矢量的第0号元素,

   理解:将 rend 当做 begin 来理解,只是rend 指向 begin 的前一位

 

   1:  #include 
  
  
   2:  #include
  
  
   3:   
   4:  using namespace std;;
   5:   
   6:  int main()
   7:  {
   8:      vector<int> mydata;
   
   
   9:      mydata.push_back(25);//在矢量尾增加一个元素,参数为元素的值
  10:      cout<
  
  
   
   <<
   
   '/t'<
    
    
     
     <
     
     
      
      //越界不检查
       
       
       
       
     
     
    
    <
    
    
     
     
    
    
  
  <<
  11:   
  12:   
  13:      vector<int> mydata1(100);
   
   
  14:      cout<
  
  
   
   <<
   
   '/t'<
    
    
     
     <<
     
     '/t'<
      
      
       
       <
       
        
        //默认初始化为0, 
          
          
          
       
      
      <
      
      
       
       
      
      
    
    <<
  
  <<
  15:   
  16:   
  17:      vector<int> mydata2(10,-1);
   
   
  18:      cout<
  
  
   
   <<
   
   '/t'<
    
    
     
     <<
     
     '/t'<
      
      
       
       <
       
        
        //构造时,第二个参数为默认初始值 
          
          
          
       
      
      <
      
      
       
       
      
      
    
    <<
  
  <<
  19:   
  20:      vector<int> mydata3;
   
   
  21:      mydata3.reserve(10);//不初始化?使用原来内存的内容?
  22:      cout<
  
  
   
   <
   
   
    
    <>

    
    
   
   
  
  <
  
  
   
   <>
  
  
  23:   
  24:   
  25:      int a[]={0,1,2,3,4,5,6};
  26:      vector<int> mydata4(a,&a[6]);
   
   
  27:      //必须用两个指针初始化矢量, 第二个参数指向要使用的最后一个元素的下一个元素,&a[6] 可以用 a+6代替
  28:   
  29:      cout<
  
  
   
   <<
   
   '/t'<
    
    
     
     <
     
     
      
      <>

      
      
      
      
     
     
    
    <
    
    
     
     <>
    
    
  
  <<
  30:      vector<int> mydata5(mydata4.begin(),mydata4.end());//end()指向最后一个元素的下一个元素
   
   
  31:   
  32:      vector<int> mydata6(mydata4.rbegin(),mydata4.rend());
   
   
  33:      //rbegin将返回指向最后一个元素的迭代器,rend将返回指向第一个元素的下一个位置的迭代器,这两种迭代器均称为逆向迭代器
  34:      
  35:   
  36:      
  37:      return 0;
  38:  }

对以上代码的一些备注:

1.VC6.0中不进行越界检查,但在VS2008中要进行越界检查的,以上程序在VS2008中可以运行,但程序会崩溃

2.VS2008中编译通过,但在VC6.0中使用 rbegin 和 rend 初始化的 mydata6 编译不通过

3.VS2008中,未初始化的矢量也不能访问,会报错 “矢量下标越界”vector subscript out of range

  但在VC6.0中却可以正常访问

  reserve()函数该如何使用呢?如何进行初始化?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值