Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 186|回复: 0

[默认分类] 学习C++ -> 向量( vector )

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-10 10:33:10 | 显示全部楼层 |阅读模式
    学习C++ -> 向量(vector)



    一、向量的介绍
        向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。
       
        在使用它时, 需要包含头文件 vector, #include<vector>
       
        vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所要放入的元素。此外, vector 也提供了许多的方法来对自身进行操作。
       
       


    二、向量的声明及初始化
        vector 型变量的声明以及初始化的形式也有许多, 常用的有以下几种形式:

    1.         vector<int> a ;                                //声明一个int型向量a
    2.         vector<int> a(10) ;                            //声明一个初始大小为10的向量
    3.         vector<int> a(10, 1) ;                         //声明一个初始大小为10且初始值都为1的向量
    4.         vector<int> b(a) ;                             //声明并用向量a初始化向量b
    5.         vector<int> b(a.begin(), a.begin()+3) ;        //将a向量中从第0个到第2个(共3个)作为向量b的初始值
    复制代码

            
        除此之外, 还可以直接使用数组来初始化向量:

    1.         int n[] = {1, 2, 3, 4, 5} ;
    2. vector<int> a(n, n+5) ;              //将数组n的前5个元素作为向量a的初值
    3.         vector<int> a(&n[1], &n[4]) ;        //将n[1] - n[4]范围内的元素作为向量a的初值
    复制代码



            
            
    三、元素的输入及访问
        元素的输入和访问可以像操作普通的数组那样, 用cin>>进行输入, cout<<a[n]这样进行输出:
        示例:

    1. 1     #include<iostream>
    2. 2     #include<vector>
    3. 3
    4. 4     using namespace std ;
    5. 5
    6. 6     int main()
    7. 7     {
    8. 8         vector<int> a(10, 0) ;      //大小为10初值为0的向量a
    9. 9
    10. 10         //对其中部分元素进行输入
    11. 11         cin >>a[2] ;
    12. 12         cin >>a[5] ;
    13. 13         cin >>a[6] ;
    14. 14
    15. 15         //全部输出
    16. 16         int i ;
    17. 17         for(i=0; i<a.size(); i++)
    18. 18             cout<<a[i]<<" " ;
    19. 19
    20. 20         return 0 ;
    21. 21     }
    复制代码

       
        在元素的输出上, 还可以使用遍历器(又称迭代器)进行输出控制。在 vector<int> b(a.begin(), a.begin()+3) ; 这种声明形式中, (a.begin()、a.begin()+3) 表示向量起始元素位置到起始元素+3之间的元素位置。(a.begin(), a.end())则表示起始元素和最后一个元素之外的元素位置。
        向量元素的位置便成为遍历器, 同时, 向量元素的位置也是一种数据类型, 在向量中遍历器的类型为: vector<int>::iterator。 遍历器不但表示元素位置, 还可以再容器中前后移动。
       
        在上例中讲元素全部输出部分的代码就可以改写为:

    1.     //全部输出
    2.     vector<int>::iterator t ;
    3. for(t=a.begin(); t!=a.end(); t++)
    4. cout<<*t<<" " ;
    复制代码

            
        *t 为指针的间接访问形式, 意思是访问t所指向的元素值。
       
       


    四、向量的基本操作

    1. [b] 1>.[/b] [b]a.size()[/b]                 //获取向量中的元素个数
    2.     [b]2>.[/b] [b]a.empty()[/b]                //判断向量是否为空
    3.     [b]3>.[/b] [b]a.clear()[/b]                //清空向量中的元素
    4.     [b]4[/b]>. [b]复制[/b]
    5. [b]a [/b][b]= b ;[/b]            //将b向量复制到a向量中
    6.     [b]5>[/b]. [b]比较[/b]
    7. 保持 [b]==[/b]、[b]!=[/b]、[b]>[/b]、[b]>=[/b]、[b]<[/b]、[b]<=[/b] 的惯有含义 ;
    8. 如: [b]a [/b][b]== b ;[/b]    //a向量与b向量比较, 相等则返回1
    9.     [b]6>[/b]. [b]插入 -[/b][b] insert[/b]
    10. ①、 [b]a.insert(a.begin(), [/b][b]1000);[/b]            //将1000插入到向量a的起始位置前
    11. ②、 [b]a.insert(a.begin(), [/b][b]3, 1000) ;[/b]        //将1000分别插入到向量元素位置的0-2处(共3个元素)
    12. ③、 vector<int> a(5, 1) ;
    13. vector<int> b(10) ;
    14. b.insert(b.begin(), a.begin(), a.end()) ; //将a.begin(), a.end()之间的全部元素插入到b.begin()前
    15.     [b]7>.[/b] [b]删除 -[/b][b] erase[/b]
    16. ①、 [b]b.erase(b.begin()) ; [/b]//将起始位置的元素删除
    17.         ②、 [b]b.erase(b.begin(), b.begin()+3) ;[/b]        //将(b.begin(), b.begin()+3)之间的元素删除
    18.     [b]8>[/b]. [b]交换 -[/b][b] swap[/b]
    19. b.swap(a) ; //a向量与b向量进行交换
    复制代码



            
            
    五、二维向量
        与数组相同, 向量也可以增加维数, 例如声明一个m*n大小的二维向量方式可以像如下形式:

    1.         vector< vector<int> > b(10, vector<int>(5));        //创建一个10*5的int型二维向量
    复制代码


        在这里, 实际上创建的是一个向量中元素为向量的向量。同样可以根据一维向量的相关特性对二维向量进行操作。
       
        :

    1. 1     #include<iostream>
    2. 2     #include<vector>
    3. 3
    4. 4     using namespace std ;
    5. 5
    6. 6     int main()
    7. 7     {
    8. 8         vector< vector<int> > b(10, vector<int>(5, 0)) ;
    9. 9
    10. 10         //对部分数据进行输入
    11. 11         cin>>b[1][1] ;
    12. 12         cin>>b[2][2] ;
    13. 13         cin>>b[3][3];
    14. 14
    15. 15         //全部输出
    16. 16         int m, n ;
    17. 17         for(m=0; m<b.size(); m++)           //b.size()获取行向量的大小
    18. 18         {
    19. 19             for(n=0; n<b[m].size(); n++)    //获取向量中具体每个向量的大小
    20. 20                 cout<<b[m][n]<<" " ;
    21. 21             cout<<"\n" ;
    22. 22         }
    23. 23
    24. 24         return 0;
    25. 25     }
    复制代码

       
        同样, 按照这样的思路我们还可以创建更多维的向量, 不过维数太多会让向量变得难以灵活控制, 三维以上的向量还需酌情使用。
       
       

    --------------------


    wid, 2013.01.22


    上一篇: 学习C++ -> string类字符串
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-17 00:04 , Processed in 0.355544 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表