精华内容
下载资源
问答
  • vector动态数组详解

    千次阅读 多人点赞 2020-12-16 17:14:06
    vector动态数组 咳咳,又是愉快的一天哈,icpc济南站马上就要开始,多少还有点紧张。也不知道能拿到什么样的成绩。。。咳咳,言归正传哈,今天咱学学vector动态数组,说实话这玩意用的就比较多了,我尽力写出它的...

    vector动态数组

    咳咳,又是愉快的一天哈,icpc济南站马上就要开始,多少还有点紧张。也不知道能拿到什么样的成绩。。。咳咳,言归正传哈,今天咱学学vector动态数组,说实话这玩意用的就比较多了,我尽力写出它的所有用法,再找找实战例子哈!

    • 先来讲讲这vector的特性,话说这vector呀,能从尾部直接插入或者修改,直接访问数组任何元素以及修改。也可以根据需要来定义数组的类型以及大小;
    • 接下来,看看这vector的定义规范:
    功能例子说明
    定义 int 型数组vector < int > a;
    vector < int > b(a);
    vector < int > a(100);
    vector < int > a(100,6);
    默认初始化,a为空
    用a定义b
    a有100个值为0的元素
    a有100个值为6的元素
    定义 string 型数组vector < string > s(10,“hello”);
    vector < string > s(t.begin(),t.end());
    10个值为hello的元素
    s数组对t进行复制
    定义 结构体 型数组struct node{int x,y;};
    vector < node > a;
    a用来存坐标
    • 然后我们来看看它的基本常用操作
    功能例子说明
    赋值a.push_back(100)在尾部添加值为100的元素
    求元素个数int size = a.size()可速度求出数组元素个数
    判断是否为空bool isEmpty = a.empty();判断是否为空
    打印cout << a[i] << endl;打印数组出下标为i的值
    中间插入a.insert(a.begin()+i,K);在第i个元素前面插入K
    尾部多个插入a.insert(a.end(),10,5);尾部插入10个值为5的值
    删除尾部a.pop_back();删除尾部元素
    删除区间a.erase(a.begin()+i,a.begin()+j);删除区间 [ i , j-1 ] 的元素
    删除单个元素a.erase(a.begin()+i);删除第i个元素
    调整大小a.resize(n);数组大小变为n
    清空a.clear();清空数组
    翻转reverse(a.begin(),a.end());用函数reverse()翻转整个数组
    排序sort(a.begin(),a.end());排序,默认从小到大排
    • 直接对一个数组中插入一个值,我们需要几步?
    • 没错,先记录下插入的点,然后后面元素全部往后拉,腾个位置出来,再放进去。
    • 写的那是老长老长了,但是c++给了插入函数拉!

    在这里插入图片描述

    • 想想以前学c的时候,我们要在数组里面删除一个元素,那需要先记下他的位置,然后后面的元素依次向前替换过去,多莽夫,现在好了,直接一句话。

    在这里插入图片描述

    • 这是删除单个,人家还能直接删除一个区间,想想以前还专门写一个函数来处理这些删除,害,早遇到c++多好。

    在这里插入图片描述

    • 接下来你可能还会遇到这样一个问题,我要将a数组里面的值全部复制到b数组里面去。
    • 咋办?咱写个循环然后一个一个复制进去,害,以前小何就是这样写的,然后vector数组有这个功能哦,可以直接赋值,用a来定义b就行了。

    在这里插入图片描述

    • 这里提出一个疑问哈,咱们这里用a来定义b,如果a里面的值发生改变了,b数组里面的值会发生改变吗?
    • 咳咳,这个咱就不打了哈,你想知道你就自己去试试。嘿嘿!!
    • 还有反转函数reverse,啊哈哈哈哈哈,这个不能忘,老好用了。

    在这里插入图片描述

    • vector容器给我们带来的方便还是很多的。
    • 像我写图论里面邻接表法的时候都是用vector来写的,老方便了。
    • 说了这么多,咱直接找个题目来实战一下;

    “耶稣的叛徒”

    耶稣有13个门徒。当中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个開始报号:1。2,3。1,2,3…。

    凡是报到“3”就退出圈子。最后留在圈子内的人就是出卖耶稣的叛徒。请找出它原来的序号。

    输入样例:

    输出样例:

    13

    • 题目意思很清楚啊,数数,数到三就是好人,走开,最后留下来的那一个人就是叛徒。
    • 来看看我们的c++写法吧。

    在这里插入图片描述

    • 是不是有点用上了,是不是用舒服了。哎嘿嘿,说实话,原来用c++打这个的时候,老麻烦了。
    • 咳咳,再来一题比较难的。冲冲冲!!!

    hdu 4841 “圆桌问题”

    题目链接:点我了解题目<----这是一个链接

           圆桌上围坐着 2n 个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。
           试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。
           输入:多组数据,每组数据输入:好人和坏人的人数n(<=32767)、步长m(<=32767);
           输出:对于每一组数据,输出2n个大写字母,‘G’表示好人,‘B’表示坏人,50个字母为一行,不允许出现空白字符。相邻数据间留有一空行。

    输入样例:

    2 3
    2 4

    输出样例:

    GBBG
    BGGB

    • 咳咳,看题先看读题,不一定要想,但一定要读。个人感觉这样子理解题目意思会更快一点。
    • 可知道哈,前面也是和我们的叛徒是一样的,直接做个循环,然后踢人就好了。
    • 然后后面输出的时候要进行处理下哦。看题看题,看仔细!!!
    #include<bits/stdc++.h>
    using namespace std;
    vector<int > a;
    int main(){
    	int n , m;
    	while(~scanf("%d%d",&n,&m)){			//注意的是这里是多组输入输出 
    		a.clear();							//进来直接先清空。初始化。
    		for(int i=1;i<=n*2;i++){			//将2*n个人投入到a数组中 
    			a.push_back(i);
    		} 
    		int pos = 0;
    		while(a.size()!=n){					//原理同耶稣的叛徒,一样滴 
    			pos = (pos+m-1)%a.size();
    			a.erase(a.begin()+pos);
    		}
    		int j = 0;
    		for(int i=1;i<=n*2;i++){	
    			if(j<n&&a[j]==i){				//留下的就是好人,走的就是坏人 
    				cout << "G";
    				j++;
    			}else{
    				cout << "B";
    			}
    			if(i%50==0&&i!=1)cout << endl;	//这个划重点,第一个不用换行,然后每50个字符换行一次。 
    		}
    		cout << endl << endl;				//题目要求,每个测试样例之间要隔一行 
    	}
    	return 0;
    } 
    
    • 题目做的越多,你就会越细,我说的是看题哈。
    • 这题还行,上手,记得自己打哈,我本来不打算直接上代码的,但是这玩意太长了,我截图不下,就给代码吧。
    • 只有自己打了,才会理解,才会明白里面的弯弯绕绕。
    • 咳咳,今天的vector数组就到这里拉,我要和我的小圆圆打电话去啦。


    ------------------------------2020/12/16------------------------------
    改革尚未成功,同志仍需努力!!!
    展开全文
  • 数组是c++中类似vector的数据结构,它们都可以对一种类型进行储存,既都是容器。虽说两者有相似之处,但也有显著的区别,c++ primer的作者说到,在实际的编程中,我们作为程序员应该避免用到低级数组和指针,而更...

    数组是c++中类似vector的数据结构,它们都可以对一种类型进行储存,既都是容器。虽说两者有相似之处,但也有显著的区别,c++ primer的作者说到,在实际的编程中,我们作为程序员应该避免用到低级数组和指针,而更应该多用高级的vector和迭代器。在程序强调速度的情况下,我们程序员可以在类类型的内部使用数组和指针。下面我对vector和数组进行了总结。
    两者的相同和区别如下:

    数据结构vector数组
    相同都是对同一种类型的数据进行储存。
    都可以用下标操作进行处理
    都可以用迭代器进行操作(在c++中每个容器都配有各自的迭代器)
    不相同可以用size获取vector的长度不可以获取,在定义时就已经确定了长度
    长度不固定,可以随时增加长度固定,在定义是就不可以更改
    可以在末尾增加vector的元素(用push_back)不能增加在长度以外的长度
    可以确定长度,节约空间不能确定长度,必须在定义时定义一个很大的空间留给数组,造成内存的浪费

    在vector中,可以用到的命令:

    v.empty(); 用于判断是否v为空的。

    v.size();用于确定v的长度。

    v.push_back(t); 用于在v的最后加元素t

    v[n];用于在读取第n个元素,(用于下标操作)

    v1 = v2;把v2给v1

    v1 = = v2;判断是否v1等于v2;

    还可以用各种运算操作符来进行判断。!=;>=;<=;<;>.
    ————————————————
    版权声明:本文为CSDN博主「zyr4712008」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/zyr4712008/article/details/8686565

    展开全文
  • 方法1 :数组方法,不推荐练习用 ...利用Vector代替数组处理(数组处理见下方注释):从键盘读入学生成绩(以负数代表输入结束),找出 最高分,并输出学生成绩等级。 提示:数组一旦创建,长度就固定不变

    方法1 :数组方法,不推荐, 练习数组可用
    2. 从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
    成绩>=最高分-10 等级为’A’
    成绩>=最高分-20 等级为’B’
    成绩>=最高分-30 等级为’C’
    其余 等级为’D’
    提示:先读入学生人数,根据人数创建int数组,
    存放学生成绩。
    方法2:利用Vector代替数组
    利用Vector代替数组处理(数组处理见下方注释):从键盘读入学生成绩(以负数代表输入结束),找出
    最高分,并输出学生成绩等级。
    提示:数组一旦创建,长度就固定不变,所以在创建数组前就需要知道它的
    长度。而向量类java.util.Vector可以根据需要动态伸缩。
    创建Vector对象:Vector v=new Vector();
    给向量添加元素:v.addElement(Object obj); //obj必须是对象
    取出向量中的元素:Object obj=v.elementAt(0);
    注意第一个元素的下标是0,返回值是Object类型的。
    计算向量的长度:v.size();
    若与最高分相差10分内:A等;20分内:B等;
    30分内:C等;其它:D等
    方法1,2 代码:

    package ScoreGrade;
    
    import sun.reflect.generics.scope.Scope;
    
    import javax.swing.text.StyledEditorKit;
    import java.util.Scanner;
    import java.util.Vector;
    
    /**
     * @version v-1.8.0_131.
     * @auther Jack hou  Email:256595662@qq.com
     * @data 2021/2/4/11:11
     * @Description:
     **/
    /*方法2:推荐
            利用Vector代替数组处理(数组处理见下方注释):从键盘读入学生成绩(以负数代表输入结束),找出
            最高分,并输出学生成绩等级。
            提示:数组一旦创建,长度就固定不变,所以在创建数组前就需要知道它的
            长度。而向量类java.util.Vector可以根据需要动态伸缩。
            创建Vector对象:Vector v=new Vector();
            给向量添加元素:v.addElement(Object obj); //obj必须是对象
            取出向量中的元素:Object obj=v.elementAt(0);
            注意第一个元素的下标是0,返回值是Object类型的。
            计算向量的长度:v.size();
            若与最高分相差10分内:A等;20分内:B等;
            30分内:C等;其它:D等
            */
    public class Tesr {
        public static void main(String[] args) {
    
            //1.实例化Scanner,用于从键盘获取学生成绩
            Scanner scan=new Scanner(System.in);
    
            //2.创建Vector对象:Vector v=new Vector();相当于原来的数组
            Vector v = new Vector();
    
            //3.通过for(;;)或while(true)方式,给Vector中添加数组
            int maxScore=0;
            System.out.println("请输入学生成绩(以负数代表输入结束): ");
            for (;;){
                int score=scan.nextInt();
                //3.2 当输入是负数时,跳出循环
                if (score<0){
                    break;
                }if (score>100){
                    System.out.println("输入的数据非法,请重新输入");
                    continue;
                }
                //3.1 添加操作::v.addElement(Object obj)
                v.addElement(score);
                //4.获取学生成绩的最大值
                if (score>maxScore){
                    maxScore=score;
                }
            }
            //5.遍历Vector,得到每个学生的成绩,并与最大成绩比较,得到每个学生的等级。
            char level;
            for (int i=0;i<v.size();i++){
                Object obj=v.elementAt(i);
    //jdk 5.0之前:
    //			Integer inScore = (Integer)obj;
    //			int score = inScore.intValue();
                //jdk 5.0之后:
                int score = (int)obj;
    
                if(maxScore - score <= 10){
                    level = 'A';
                }else if(maxScore - score <= 20){
                    level = 'B';
                }else if(maxScore - score <= 30){
                    level = 'C';
                }else{
                    level = 'D';
                }
    
                System.out.println("studentID is " + (i+1) + " score is " + score + ",level is " + level);
    
            }
    
    
    		//方法1可自行解注释运行
           /*方法1:数组方法,不推荐练习用
               2. 从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
                成绩>=最高分-10 等级为’A’
                成绩>=最高分-20 等级为’B’
                成绩>=最高分-30 等级为’C’
                其余 等级为’D’
            提示:先读入学生人数,根据人数创建int数组,
            存放学生成绩。
            */
            /*
            Scanner scanner=new Scanner(System.in);
            System.out.println("请输入学生的人数:");
            int num =scanner.nextInt();
            int[] score=new int[num];
            int maxScore=0;
            for (int i=0;i<score.length;i++){
                System.out.println("请输入第"+(i+1)+"个人的成绩: ");
                //int score1=scanner.nextInt();
                //score[i]=score1;
                score[i]=scanner.nextInt();//可直接接收
    
            }
            for (int i=0;i<score.length;i++){
                if (maxScore<score[i]){
                    maxScore=score[i];
                }
            }
            System.out.println("最大值为: "+maxScore);
            for (int i=0;i<score.length;i++){
                if (score[i]>=(maxScore-10)){
                    System.out.println("学生成绩为:"+score[i]+"等级为: A");
                }
                else if (score[i]>=(maxScore-20)){
                    System.out.println("学生成绩为:"+score[i]+"等级为: B");
                }
                else if (score[i]>=(maxScore-30)){
                    System.out.println("学生成绩为:"+score[i]+"等级为: C");
                }
                else {
                    System.out.println("学生成绩为:"+score[i]+"等级为: D");
                }
            }
            */
        }
    }
    

    方法2运行结果

    原创不易,喜欢就点个赞吧!谢谢

    展开全文
  • Vector数组的区别

    千次阅读 2018-03-25 17:23:12
    转自...虽说两者有相似之处,但也有显著的区别,c++ primer的作者说到,在实际的编程中,我们作为程序员应该避免用到低级数组和指针,而更应该多用高级的vector和迭代器。在程序强调速度的情...

      转自https://blog.csdn.net/zyr4712008/article/details/8686565 

        数组是c++中类似vector的数据结构,它们都可以对一种类型进行储存,既都是容器。虽说两者有相似之处,但也有显著的区别,c++ primer的作者说到,在实际的编程中,我们作为程序员应该避免用到低级数组和指针,而更应该多用高级的vector和迭代器。在程序强调速度的情况下,我们程序员可以在类类型的内部使用数组和指针。下面我对vector和数组进行了总结。两者的相同和区别如下:

         数据结构

    Vector

    数组

    都是对同一种类型的数据进行储存。

    都可以用下标操作进行处理

    都可以用迭代器进行操作(在c++中每个容器都配有各自的迭代器)

    可以用size获取vector的长度

    不可以获取,在定义时就已经确定了长度

    长度不固定,可以随时增加

    长度固定,在定义是就不可以更改

    可以在末尾增加vector的元素(用push_back)

    不能增加在长度以外的长度

    可以确定长度,节约空

    不能确定长度,必须在定义时定义一个很大的空间留给数组,造成内存的浪费

    在vector中,可以用到的命令:

    v.empty();  用于判断是否v为空的。

    v.size();用于确定v的长度。

    v.push_back(t); 用于在v的最后加元素t

    v[n];用于在读取第n个元素,(用于下标操作)

    v1 = v2;把v2给v1

    v1 = = v2;判断是否v1等于v2;

    还可以用各种运算操作符来进行判断。!=;>=;<=;<;>.

    展开全文
  • vector数组 用法陷阱

    千次阅读 2018-04-13 11:10:13
    vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 我们必须包含相关的头文件 :#include &lt;vector&gt;使用vector有两种不同的形式,...
  • 相比较于vector数组的缺点前言数组的缺点数组的灵活性差数组不允许拷贝和赋值数组更容易越界获取数组的长度不方便数组数组结束语 前言 数组vector一样可以存放任意对象,除了引用,即不存在引用的数组,也不...
  • 利用Vector代替数组处理:从键盘读入学生成绩(以负数代表输入结束),找出最高分,并输出学生成绩等级。 提示:数组一旦创建,长度就固定不变,所以在创建数组前就需要知道它的长度。 而向量类java.util.Vector可以...
  • vector常用方法 assign() 对Vector中的元素赋值 void assign( input_iterator start, input_iterator end ); // void assign( size_type num, const TYPE &val ); reserve() 设置Vector最小的元素容纳...
  • 使用vector代替数组

    2019-08-18 16:34:44
    利用Vector代替数组处理:从键盘读入学生成绩(以负数代表输入结束),找出最高分,并输出学生成绩等级。 提示:数组一旦创建,长度就固定不变,所以在创建数组前就需要知道它的长度。而向量类java.util.Vector可以...
  • C++之vector数组详解

    千次阅读 2018-01-28 15:11:43
    大家都知道的,C++的vector是挺烦的,但是C++作为OO语言的父亲,我们不得不学习一下模板数组 vector简介 C++作为面向对象语言,对象作为实体,其抽象化特征化就是类、模板,所以有了很多的STL出现。vector也不...
  • 本文讨论了vector高维数组与一维数组处理速度。 ////////////////////////////////////////////// // // File: vector_text.cpp // Author: Onlyone // Date: 2017.10.5 //  // Description: // runing time...
  •  这个时候对得到的点处理vector3: public string Parse(string str){ string[] strs = str.Split('\n'); foreach(var m in strs){ if(m != "") { string[] temp = m.Split(','); beats_positions.Add...
  • Vector数组

    2018-05-22 17:33:07
    Vector工具类和ArrayList工具类都可以作为可变数组处理,只是Vector是线程安全,ArrayList线程非安全。下面详细介绍Vector类 Vector类实现了List接口和继承了AbstractList类,所以Vector类有和ArrayList类相同的...
  • **题目:**利用Vector代替数组处理:从键盘读入学生成绩(以负数代表输入结束),找出最高分,并输出学生成绩等级。 提示:数组一旦创建,长度就固定不变,所以在创建数组前就需要知道它的长度。而向量类java.util...
  • 向量(vector)是一个封装了动态大小数组的顺序容器(sequence container)。跟任意其它类型的容器一样,它能够存放任何类型的对象。可以简单地认为,vector是一个能够存放任意类型的动态数组。 二、容器特性 2.1、...
  • vector多维数组(转)

    2012-11-09 16:16:31
    vector多维数组 转自CSDN 我们知道,C++的template参数是可以嵌套定义的,你可以这样定义一个模板的Instance  vector > array2(3);//注意>和>之间的空格。  这就是我们的关键,array2可以保存3个向量,向量...
  • vector二维数组的内存分析 创建一个2x4的二维数组。想到的办法是:先创建一个容器的容器,外层大小的2(2行),然后里面容器小大为4(4列)。 int row=2,col=4; vector<vector<int> > v(row);//v为...
  • vector数组间数据copy处理

    千次阅读 2009-01-14 13:52:00
    #algostuff.h /* PRINT_ELEMENTS() * - prints optional C-string optcstr followed by * - all elements of the ... vector<int> v3(iBuf,iBuf+10); PRINT_ELEMENTS(v3); return 0; }    
  • 1. array 定义的时候必须定义数组的元素个数;而vector 不需要; 且只能包含整型字面值常量,枚举常量或者用常量表达式初始化的整型const对象,非const变量以及需要到运行阶段才知道其值的const变量都不能用来定义...
  • STL中VECTOR动态数组的用法在实际开发种,数组的运用时费用广泛的,各种各样的数组,如int a[10];int *b[10];char d[10];class d[10];class *e[10];以上的几个例子我们可以看到,数组长度都是固定的。确定一个数组...
  • VECTOR 数组

    2021-02-14 20:12:51
    Vector是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,vector是一个能够存放任意类型的动态数组。 可以这样说,vector就是一个...
  • C++ vector 实现二维数组

    千次阅读 2020-12-24 02:02:03
    在STL中Vector这一容器,无论是在封装程度还是内存管理等方面都由于传统C++中的数组。本文主要是关于使用Vector初始化、遍历方面的内容。其他二维的思想也是类似的。这里简单叙述一下C++ 构建二维动态数组int **p;p ...
  •   相信大家在做许多OJ题目时,遇到往vector数组中输入不确定行和列的数组,那么该如何处理呢? 1、一维数组的不确定输入   这里我们通过cin.get(),这个函数来进行判断,判断输入的是否为回车(也就是换行符),...
  • vector 二维数组

    2020-11-22 10:12:54
    //vector二维数组处理不定长度的问题 for(int i=0;i;i++){ vectorr; string s; getline(cin,s); int k=0; for(int j=0;j>n; for(int i=0;i>a>>b>>c>>d>>e; if(a>v[0].size()||b>v[1].size()||c>v[2].size()||d>v[1]....
  • 1.vector数组的初始化 (1): vector ilist1; 默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加...
  • 1.vector的定义 2. vector内的元素访问 3. vector常用函数 push_back(x) pop_back() size() clear() insert(it,x) erase(it)和erase(first,last) 4. vector常见用途 1.存储数据 2.用邻接表存储图 1....
  • C++之vector用法及二维数组

    千次阅读 2019-03-28 19:29:18
    Part Ⅰ vector用法 目录 介绍 用法 头文件 vector声明及初始化 ...vector基本操作 ...建立二维数组 ...简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 就像数组一样,vecto...
  • 0525_C++ vector数组

    2020-05-25 22:16:35
    以下为vector容器相关: vector能够容纳大多数类型的对象作为元素,除了引用,因为引用不是对象。甚至组成vector的元素也可以是vectorvector初始化 vector<T> v1 v1是一个空vector,潜在...
  • vector作为数组的替代品,是相当好用的。数组有下标定位,Vector同样有定位。 1。iterator迭代器 begin(): 获取vector第一个元素的迭代器。 end():获取最后一个元素的下一个位置,就是空位置。 优点:end()...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,203
精华内容 56,881
关键字:

vector处理数组