精华内容
下载资源
问答
  • Vector 容器数组

    2021-03-05 16:30:49
    //容器Vector(数组) //算法:for_each //迭代器:vect::iterator 运行代码 #include <iostream> using namespace std; //包含头文件 #include<vector> //包含算法头文件 #include<algorithm> ...

    C++:Vector 容器

    运用工具

    //容器:Vector(数组)
    //算法:for_each
    //迭代器:vect::iterator

    运行代码

    #include <iostream>
    using namespace std;
    //包含头文件
    #include<vector> 
    
    //包含算法头文件
    #include<algorithm>
    
    void myPrint(int val)
    {
        cout << val << endl;
    }
    
    void test01()
    {
        vector<int> v; //相当于模板实例化
    
        //变量使用函数
        v.push_back(10);
        v.push_back(20);
        v.push_back(30);
        v.push_back(40);
        v.push_back(50);
        v.push_back(60);
    
        //通过迭代器访问容器中的数据
        vector<int>::iterator itBegin = v.begin(); 
        //起始迭代器 v.begin() 返回第一个元素的指针
    
        vector<int>::iterator itEnd = v.end();
        //结束迭代器 v.end() 返回最后一个元素的下一个位置的指针
    
        //itBegin、itEnd 相当指针
    
        //第一种遍历方式
        while (itBegin != itEnd)
        {
            //cout << *itBegin << endl;
            itBegin++;
        }
    
        //第二种遍历方式(最常用)
        for (vector<int>::iterator it = v.begin(); it != v.end();++it)
        {
            //cout << *it << endl;
        }
    
        //第三种遍历算法 利用STL提供的遍历算法
        for_each(v.begin(),v.end(),myPrint);
        //参数列表为 起始指针 结束指针 函数名
    
    }
    int main()
    {
        test01();
    }
    
    
    

    第三种遍历算法原理

    for_each 算法剖析

    总结

    //STL – 标准模板库
    //1、容器 2、算法 3、迭代器
    //统一采用 模板类 或 模板函数
    //容器 和 算法 通过迭代器无缝连接

    //六大组件:
    //容器 算法 迭代器 仿函数 适配器 空间配置器

    //1、容器:各种数据结构 如:vector、list、deque、set、map等
    // (用来存放数据)
    //2、算法:各种常用的算法:sort、find、copy、for_each等
    //3、迭代器:扮演了容器与算法之间的胶合剂
    //4、仿函数:行为类似函数,可作为算法的某种策略 如:重载符号函数

    //5、适配器:一种用来修饰容器或者仿函数或迭代器接口的东西
    //6、空间配适器:负责空间的配置与管理

    //常见数据结构:数组、链表、树、栈、队列、集合、映射表

    //容器:
    //序列式容器:强调值的排序,每个元素有固定的位置
    //关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序结构

    //序列容器(放数据时不会排序) 关联容器(放数据时会排序)

    //算法:标准算法头文件(Algorithms)
    //质变算法:运算过程中改变元素的内容,如:拷贝、替换、删除
    //非质变算法:运算过程中不会改变元素的内容,如:查找、计数、遍历、寻找极值

    //算法通过迭代器访问容器中数据
    //每个容器都有自己的迭代器(相当于指针)

    //迭代器:双向以及随机访问的迭代器

    展开全文
  • (打赏完成私信我)9.2 vector容器数组的最佳替代者在STL尚未诞生的年代,如果要想在程序中保存管理大量的同类型数据,则只能采用数组这种“粗鲁”的方式。例如,我们要保存公司中所有的员工对象,需要这样的数组...

    想要抢先看后面的章节?打赏本文10元,即可获得带插图全本下载地址!

    (打赏完成私信我)

    9.2 vector容器是数组的最佳替代者

    在STL尚未诞生的年代,如果要想在程序中保存和管理大量的同类型数据,则只能采用数组这种“粗鲁”的方式。例如,我们要保存公司中所有的员工对象,需要这样的数组:

    // 定义数组的容量const int MAX_COUNT = 100000;

    // 定义保存Employee对象的数组Employee arrEmp[MAX_COUNT];

    这样的方式是可以解决问题,但是却显得非常“粗鲁”: 如果定义的最大容量大于实际的需要,会造成内存空间的浪费;而如果定义的最大容量小于实际的需要,又无法满足程序的需要,更不利于程序的扩展。同时,对数组元素的访问也非常“粗鲁”,数组无法对索引值进行检查,很容易造成数组的访问越界等严重的内存访问错误;无法在一个数组中动态地插入或者删除一个数据;无法通过传值的方式在函数之间传递一个数组等。

    随着STL的出现,其中的vector容器同样可以用于保存和管理大量同类型数据,但无论是在内存管理上还是在对数据元素的访问上,都要优于数组:vector容器动态增减的容量大小替代了数组的固定容量,可以适应各种不同的需要;通过vector容器提供的功能函数操作数据元素替代了数组通过“[]”对数据元素的直接操作,不仅更加安全,同时还提供了更丰富的操作。因此vector容器也成为了数组的最佳替代者,是我们最为常用的STL容器。同时,其使用方法具有一定的典型性,学会了使用vector容器,依葫芦画瓢,基本上也就学会了使用STL中的其他容器。

    9.2.1 创建并初始化vector对象

    在本质上,vector容器是一个类模板vector,因此要想使用vector容器,首先需要根据我们想要保存数据的类型实例化得到一个特定类型的模板类,然后创建相应的vector容器对象,最后就可以利用它提供的功能函数,对容器进行添加、删除、插入等常见操作,完成对数据的管理。例如,我们的程序中拥有大量的Employee对象,需要一个vector容器来对其进行管理:

    #include // 引入vector类模板所在的头文件using namespace std; // 使用vector所在的名字空间std

    // …// 因为要保存Employee对象,先使用Employee类型实例化vector类模板,// 然后创建实例对象vecEmpvector vecEmp;

    这样,我们就得到了一个空的可以保存Employee类型数据的vector容器。除了空容器之外,如果想得到一个已经保存有默认数据的vector容器,则可以在创建容器对象的时候,利用其构造函数指定默认数据及默认数据的个数。当容器对象创建完成时,这些默认数据也就已经保存在容器中了。例如:

    Employee emp; // 默认数据// 创建4个emp对象的副本保存到容器中vector vecEmp(4, emp);

    // 使用Employee类的默认构造函数创建4个对象保存到容器中vector vecDefEmp(4);

    在创建一个vector容器的时候,除了可以指定其中元素的个数以及默认的元素之外,vector容器还提供了一个可以接受初始化列表(initializer list)为参数的初始化列表构造函数,这也就意味着,我们可以利用初始化列表,在创建容器对象的同时将任意多个相应类型的数据添加到容器中,以此来完成vector容器的初始化工作。例如:

    // 创建一个保存学生成绩的vector容器// 在创建的同时利用初始化列表添加初始数据vector vecScores = { 87, 72, 63, 93 };

    虽然vector容器的内存是随着元素个数的增加而动态增加的,但如果已经预先知道vector容器可能的最大容量,则可以使用reserve()函数申请足够的内存,为vector容器预留足够多的元素位置,减少在元素添加过程中内存的动态申请过程。例如:

    // 大约有1000位员工,所以为vector容器预留1000个元素位置vecEmp.reserve( 1000 );

    vector容器的“备胎”——array容器

    作为数组的最佳替代者,vector容器有着无数的优势,但是在某些特殊情况下,这些优势却反而变成了劣势。比如,要保存一组固定个数相同类型的数据,例如一年12个月的平均气温、一周7天的PM 2.5数值等。在这种情况下,如果仍旧使用vector容器来存放这些数据,vector容器的动态内存往往会申请比实际保存数据所需的更多的空间,这样会浪费宝贵的内存资源;vector容器提供了push_back()函数可以动态地向容器中添加数据,如果无意中调用了push_back()函数,就会破坏这组数据的固定个数。既要利用容器的各种优势,又要避免vector容器在保存这类数据时的各种劣势,STL提供了vector容器的备胎——array容器。

    array是一个支持随机访问且大小固定的容器。跟vector容器为元素预留空间不同,array容器并不预留多余空间,只为元素分配必需的空间,因此它克服了vector容器在保存固定个数数据浪费内存资源的劣势;同时,跟普通数组不同的是,它保存了自己的size信息,同时提供了必要的操作函数,可以方便地安全地对数据进行操作,这又使得它弥补了普通数组的劣势。正是array容器的这些特点,使得它特别适合在嵌入式系统和有类似限制(性能敏感、安全关键、内存紧张)的系统中使用。

    跟vector容器相似,array容器同样是一个类模板,只不过它需要两个特化参数,第一个参数表示这个容器可以保存的数据类型,第二个参数表示这个容器可以保存的数据个数。例如:

    // 引入定义array容器的头文件#include using namespace std;

    // 定义一个只能保存12个double类型数据元素的array容器array

    arrMonths;

    // 像使用普通数组一样,使用下标对容器中的数据元素进行赋值,将数据保存到容器中arrMonths[0] = 15.4;

    arrMonths[1] = 17.6;

    // ...arrMonths[11] =19.7;

    同样,我们也可以使用迭代器访问array容器中的数据:

    // 输出array容器中的所有数据for(auto it =

    arrMonths.begin();

    it

    != arrMonths.end(); ++it )

    {

    // 使用迭代器访问array容器中的数据 cout<

    }

    概括来讲,array容器除了无法动态地改变它的大小之外,在操作上,array容器与vector容器并无太大区别。所以,如果有一组固定个数相同类型的数据需要保存,array容器是比vector容器更好的选择。

    9.2.2 对vector容器的操作

    对于数组,我们都是通过指针或者它的下标来对其中的元素进行访问,这样的操作方式虽然简便,却也非常容易造成数组访问越界的错误。vector容器作为数组的最佳替代者,当然不会采用这么“粗鲁”的方式来操作容器中的元素。取而代之的是,它提供了很多操作函数,使用这些函数,可以灵活而安全地完成对vector容器的各种操作。vector容器提供的常用操作函数如表9-1所示。

    表9-1 vector容器的常用操作函数(以操作vector容器v为例)

    函 数 说 明v.empty() 判断容器v是否为空。如果v为空,则返回true;否则返回false

    v.size()返回容器v中已保存元素的个数

    v.push_back(val)在容器v的末尾增加一个值为val的元素

    v.pop_back()返回容器v的最后一个元素

    v.insert(pos,val)在容器v的pos位置插入一个值为val的元素

    v.earse(pos)删除容器v中pos位置上的元素

    v.clear()删除容器v中的所有元素

    v.at( pos )返回容器v中pos位置上的元素

    v1 = v2将v2赋值给v1,也就是把容器v2中的元素全部复制到容器v2中

    v1 == v2判断容器v1和容器v2是否相等,也就是两个容器中的元素是否相等,如果v1与v2相等,则返回true

    在表9-1所述的这些操作函数中,最常用的应该是push_back()函数了,我们通常使用它来将数据保存到vector容器中。当使用push_back()函数向vector容器中添加数据时,它会接受一个跟vector容器模板参数数据类型相同的数据,然后将其复制为一个新元素并添加到vector容器的末尾,也就是将数据“推送(push)”到vector容器的“后面(back)”。例如:

    // 创建一个空的可以保存整型数的vector容器vector vecSalary;

    int nSalary; // 接受用户输入// 循环读取用户输入while(cin>>nSalary)

    {

    // 利用push_back()函数将用户输入的数据保存到vector容器对象vecSalary中 vecSalary.push_back( nSalary );

    }

    // 在容器的开始位置插入一个数据auto it = vecSalary.begin(); // 获得指向开始位置的迭代器vecSalary.insert(it,2200); // 在容器的开始位置插入数据// 输出当前容器中的元素个数cout<

    在这段代码中,因为需要保存用户输入的int类型的工资数据,所以首先以int作为vector类模板的类型参数,定义了一个空的能够保存int类型数据的vector容器vecSalary;然后通过循环从标准输入读取用户输入的数据,每循环一次就添加一个新数据元素到vecSalary容器的末尾位置,当循环结束时,vecSalary容器就包含了所有输入的数据。

    9.2.3 访问vector容器中的数据

    如果我们已经使用push_back()函数将数据保存到了容器中,那么接下来当然是希望能够访问容器中的数据,对其进行相应的处理。本质上,vector容器就是一个数组,跟访问数组中的元素相似,我们同样可以使用“[ ]”符号,以元素在容器中的次序作为下标来访问vector容器中的数据。例如:

    // 将vecSalary容器中的第一个数据元素赋值为3000vecSalary[0] = 3000;

    但是,为了保证访问元素的安全性,vector容器更多的是使用迭代器或者at()函数来访问容器中的数据元素。例如:

    // 定义索引值变量,用于访问容器中的数据

    vector::size_type nIndex = 0;

    // 循环遍历vector容器

    for( auto it = vecSalary.begin();

    it !=vecSalary.end(); ++it, ++nIndex )

    {

    // 通过迭代器读取容器中的数据

    cout<

    // 通过at()函数修改容器中元素的值

    vecSalary.at( nIndex ) += 1000; // 涨工资啦!每个人加1000元!

    cout<

    }

    这里,我们分别通过迭代器和at()函数对vector容器中的数据进行了读/写操作。虽然两者在效果上是相同的,但是在条件允许的情况下,为了保持代码的一致性,应优先通过迭代器对容器中的元素进行访问。

    从这里也可以看到,vector容器的使用如此简单,同时又比数组更加便利和安全,当我们在程序中需要保存相同类型的某个数据序列时,vector容器是数组的最佳替代者。

    展开全文
  • 数组与vector容器 一、数组基础 二、数组和指针 三、数组函数作为返回值 四、动态数组 五、数组的常见操作 六、vector容器 七、vector的常见操作 一、数组基础 1、定义 数组是用来存储相同类型的一个顺序集合。...

    一、数组基础

    1、定义
    数组是用来存储相同类型的一个顺序集合。
    数组
    2、声明
    (1)类型 数组名[数组长度]…[n];

    注意:
    ①数组长度必须是一个大于等于0的常量
    ②数组的下标从0开始访问

    (2)普通数组的声明

    //判断一个对象是不是常量表达式
    const int max = 20;                //是常量表达式
    const int lim = max + 1;            //是常量表达式
    int size = 15;                     //不是常量表达式,是普通的int
    const int a = get_size();           //不是常量表达式,a本身是一个常量,但是具体值要在运行时才能获取 
    

    (3)复杂函数的声明

    默认情况下,类型修饰符从右向左一次绑定(由内向外)

    int *a[10];               //包含10个指向int类型指针的数组(指针数组)
    int (*a)[10];              //指向大小为10的整型数组的指针(数组指针)
    int *(&a)[10];            //a是一个数组的引用,数组包含10个指针
    

    3、初始化

    使用大括号赋值初始化,{}之间的数量不能大于之前声明的数组长度。如果为定义数组长度,则数组长度为初始化的数量。

    (1)一维数组
    静态初始化:

    int a[5] = {0,1,2,3,4};
    int b[] = {0,1,2,3,4};           //b和a的效果一样
    

    动态初始化:

    int *arr = new int[100];     //创建
    delete []arr;                //释放
    

    (2)二维数组
    静态初始化:

    int aa[2][5] = {{0,1,2,3,4},{5,6,7,8,9}};
    

    动态初始化

    int (*arr)[6] = new int[5][6];    //创建
    delete []arr;                     //释放
    

    4、求数组长度

    将数组整个的长度除以每个元素的长度,就可以得出数组长度,也就是进而可以得出数组有多少个元素

    int num_size = sizeof(a)/sizeof(a[0]);
    

    二、数组和指针

    1、赋值操作

    将数组名赋值给一个指针,此时指针指向的是数组的首元素

    int a[] = {1,2,3};
    int *p = a;
    

    2、&a和&a[0]
    (1)&a表示数组地址,结果是指向该数组的指针
    (2)&a[0]表示数组首元素的地址,是指向该数组的首元素的指针。

    三、数组函数作为返回值

    C++ 不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名来返回一个指向数组的指针。

    如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下:

    int * myFunction()
    {
    	........
    }
    

    四、动态数组

    动态数组是从堆上分配的空间,在执行过程中去分配,所以叫做动态数组。

    int *parr = new int[n];            //动态申请数组内存
    delete[] parr;                  //手动释放内存
    

    动态数组的内存由程序员申请,由程序员手动释放。

    五、数组的常见操作

    1、访问数组元素

    int a = b[5];

    2、返回数组的大小

    int a[] = {1,2,3,4};
    int num = sizeof(a)/sizeof(a[0]);

    3、不允许拷贝和赋值

    int a[] = {1,2,3};
    int b[] = a;             //错误
    b = a;                   //错误

    六、vector容器

    1、定义

    vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组。vector类也用从0开始的下标表示元素的位置;但和数组不同的是,当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化。

    2、vector初始化

    vector<int> vec;           //声明一个int型向量
    vector<int> vec(5);         //声明一个初始大小为5的int型向量
    vector<int> vec(10,1);      //声明一个初始大小为10且值都为1的向量
    vector<int> vec = {1,2,3,4,5};
    
    vector<int> tmp;   
    vector<int> vec(tep);        //声明并用tmp向量初始化vec向量
    
    vector<int> tmp(vec.begin(),vec.begin()+3);    //用向量vec的第0个到第2个值初始化tmp;
    

    七、vector的常见操作

    1、常用函数汇总

    (1)push_back 在数组的最后添加一个数据
    (2)insert 增加,插入
    (3)pop_back 去掉数组的最后一个数组
    (4)clear 清空当前的vector
    (5)erase 删除
    (6)at 得到编号位置的数据
    (7)front 得到数组头的引用(begin、end返回的是指针)
    (8)back 得到数组的最后一个单元的引用
    (9)begin 返回第一个元素的指针
    (10)end 返回最后一个元素的指针
    (11)size 当前使用数据的大小,长度
    (12)max_size 最大可允许的vector元素数量值
    (13)capacity vector 实际能容纳大小
    (14)empty 判断vector是否为空
    (15)swap 交换
    (16)assign 使用括号内的值设置当前的vector

    2、常用函数详解
    (1)增加函数

    push_back()
    insert()

    //使用push_back()
    vector<int> arr;
    for(int i = 0;i < 10;i++){
    arr.push_back(i);
    }
    
    //使用insert()
    v.insert(v.begin(),6);         //在最前面插入新元素6
    v.insert(v.begin()+2,1);       //在迭代器第二个元素前插入新元素
    
    v.insert(v.end(),3,6);        //在迭代器最后一个元素后增加3个6
    
    v.insert(v.end(),v2.begin(),v2.end());       //在迭代器的最后一个元素后增加v2中的数据
    

    (2)删除函数

    pop_back()
    erase()
    clear()          //只能清除vector里面的数据,但是内存空间没有释放,如果要释放内存空 间,使用arr.swap(vector());

    //使用pop_back()
    arr.pop_back();
    
    //使用erase
    arr.erase(arr.begin()+3);        //删除第3位元素
    arr.erase(arr.begin()+2,arr.begin()+4);  //删除arr里面[2,3)的元素,(删除第2个,左闭右开)
    
    //使用clear
    arr.clear();
    

    (3)遍历函数

    at()
    front()
    back()
    begin()
    end()

    //使用at
    arr.at(3);           //指向vector中第三位的数值
    
    //使用begin()和end()
    vector<int>::iterator iter;             //迭代器
    iter = arr.begin()+4;                  //定位
    cout<<*iter<<endl;
    
    //使用begin()实现遍历
    for(vector<int>::iterator iter = arr.begin();iter != arr.end();++iter){
    cout<<” “<<*iter;
    }
    

    (4)判断函数

    empty()返回bool,但是也可以用0,1

    //使用empty()
    cout << “arr.empty():<< arr.empty() << endl;
    

    (5)大小函数

    size()                     //vector中元素的个数
    capacity()              //vector实际能容纳的大小
    max_size()            //最大可允许的vector元素数量值

    int size = arr.size();
    int cap = arr.capacity();
    int max = arr.max_size();
    

    (6)其他函数

    swap()
    assign()                //使用括号内的值设置当前的vector

    //使用swap()
    vector<int> arr(4,10);
    arr.swap(vector<int>());
    vector<int>().swap(arr);
    
    //使用assign
    vector<int> arr;
    vetor<int> first(4,10);
    arr.assign(7,3);          //分配7个3
    arr.assign(first.begin(),first.end());
    
    展开全文
  • vector作为二维数组

    2021-05-20 12:48:47
    vector本来就是可以用来代替一维数组的,vector提供了operator[]函数,可以像数组一样的操作,而且还有边界检查,动态改变大小。这里只介绍用它来代替二维的数组,二维以上的可以依此类推。1、定义二维vectorvector ...

    vector本来就是可以用来代替一维数组的,vector提供了operator[]函数,可以像数组一样的操作,而且还有边界检查,动态改变大小。

    这里只介绍用它来代替二维的数组,二维以上的可以依此类推。

    1、定义二维vector

    vector > v;//注意>和>之间的空格。(c++11之后不用注意vector> 后面两个之间的空格了)

    2、访问二维vector的元素的三种方式

    如果指定外层和内层向量的大小,就可用operator[]进行读和写;如果只指定外层向量大小,就能用push_back()函数进行写,不能用operator[]进行读和写。

    1)指定外层vector大小

    可用push_back函数进行初始化:

    v.resize(3);

    v[1].push_back(9);

    2)遍历指定内层vector大小

    提前设定好每行vector的大小,就可用operator[]访问,如下:

    for(int i=0;i<3;i++)

    v[i].resize(3);

    3)一次指定内外层vector大小

    v.resize(n, vector(m));

    C&plus;&plus; vector 实现二维数组

    在STL中Vector这一容器,无论是在封装程度还是内存管理等方面都由于传统C++中的数组.本文主要是关于使用Vector初始化.遍历方面的内容.其他二维的思想也是类似的. 这里简单叙述一下C++ 构 ...

    c&plus;&plus;用vector创建二维数组

    1 vector二维数组的创建和初始化 std::vector vec(10,90); //将10个一维动态数组初始为90std::vector<:vector ...>

    stl vector创建二维数组

    vector

    C&plus;&plus; vector 实现二维数组时&comma; 在类的头文件中定义时遇到&quot&semi;应输入类型符&quot&semi;的问题&quest;

    见下,当我在类的声明文件中定义二维vector时,提示我应输入类型说明符; 但是相同的格式定义,在类中将二维vector修改为在源文件中定义就可以顺利通过,并顺利执行打印 打印结果如下: 望大神来解惑 ...

    【剑指offer】04A二维数组中的查找,C&plus;&plus;实现

    1.题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数数组和一个整数,判断数组中是否含有该整数. 2.思路 首先选取数 ...

    C&plus;&plus;二维数组的动态声明

    int **a  =  new int* [m]   //分配一个指针数组,将其首地址保存在a中   . for(int i = 0; i < m; i++)   //为指针数组的每个元素分配一 ...

    C&plus;&plus;学习笔记之由文本文件读取数据到vector模板建立的二维数组 并存储为新的文本文件

    阅读本文可首先参考: C++学习笔记之输入.输出和文件 测试数据: /*读取txt文件到二维数组*/ #include #include

    转:用STL中的vector动态开辟二维数组

    用STL中的vector动态开辟二维数组 源代码:#include #include using namespace std;int mai ...

    用vector构造自动扩容的二维数组

    #include #include #include using namespace std; int m ...

    随机推荐

    Activiti系列:是否可以让某些流程的信息写到历史表,而另外一些不写?

    一.起因     打算使用activiti的定时启动事件来定时启动流程,然后再在该流程中针对每个用户启动另外一个流程实例来计算每个用户的实时账单,系统的用户数一般是1000~2000(此处假设是200 ...

    Android&lowbar;&lowbar;Context

    Context字面意思上下文,位于framework package的android.content.Context中, 其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过Co ...

    C语言输出当前日期和时间

    #include #include char* asctime2(const struct tm *timeptr) { static c ...

    &lbrack;jobdu&rsqb;数组中的逆序对

    http://ac.jobdu.com/problem.php?pid=1348 数组中的逆序对也是个常见的题目,算法导论中也有一些描述,参考:http://www.cnblogs.com/wuyue ...

    MySQL 5&period;7 for Windows 解压缩版 MySQL 服务无法启动

    MySQL 5.7 for Windows 解压缩版配置安装 http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345bf0.html basedi ...

    Codeforces 459E Pashmak and Graph

    http://www.codeforces.com/problemset/problem/459/E 题意: 给出n个点,m条边的有向图,每个边有边权,求一条最长的边权上升的路径的长度. 思路:用f存 ...

    基于Quqrtz&period;NET 做的任务调度管理工具

    基于Quqrtz.NET 做的任务调度管理工具 国庆前,需求让我看了一下任务调度的数据表设计.和之前一样,有100多个字段,p1 ~ p100, 我说这是干嘛啊!按这写,写死去了! 然后在网上搜了一下 ...

    Gson解析数据

    package com.bwie.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputS ...

    【2017集美大学1412软工实践&lowbar;助教博客】个人作业3——个人总结(Alpha阶段)

    题目 个人作业3--个人总结(Aplha阶段) 成绩公示 评分项 alpha过程的总结 5个问题 自我评价表 评论区互动 总分 分值 4 2.5 2.5 1 10 201221123032 1 1 2 ...

    展开全文
  • 提示:文章写完后,目录可以自动生成,如何生成可参考右边的...请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 一、解题思路 从左下角开始走,利用这个顺序关系可以在O(m+
  • C++容器vector数组片段截取操作

    万次阅读 2021-03-11 22:29:20
    文章目录一、vector的描述1.1 vector的基本使用1.1.1 vector 的头文件1.1.2 vector容器的几种创建方式1.2 vector 成员函数1.2.1 成员函数功能描述1.2.2 常用成员函数使用实例1.3 vector数组片段截取操作1.3.1 ...
  • vector> using namespace std; void test01() { //创建一个外层容器 vector<vector<int>>v; //创建一些内层容器,并赋值 vector<int>v1(10,1); vector<int>v2(10,2); vector<...
  • vector类型的数组

    2021-12-14 09:17:44
    发现了一个很有意思的东西——vector数组,记录一下 看代码时一开始把vector数组当做了一个vector向量,看到v_test[0].size()时十分迷惑,想着这也不是二维向量啊,怎么他的元素还能.size(),仔细一看竟然是个vector...
  • //以初始化列表中的値作为元素初始值,生成有6个数的初始vector数组 vector<int> array = {1,2,3,4,5,6}; vector<int> array{1,2,3,4,5,6}; //第三种初始化,使用初始元素个数以及指定元素
  • vector是一个封装动态大小数组的顺序容器(Sequence Container),这种被封装的数组可以具有各种类型。vector不是一个类,而是一个类模板。vector定义动态数组的形式为: vector<元素类型>数组对象名(数组长度); ...
  • 一、数组数组是一种确定大小的存储同种数据的容器;需要牢牢掌握初始化遍历方法,特别是两种遍历方式1. 简介数组是一个存放多个数据的容器;数据是同一种类型;所有的数据是线性规则排列;可通过位置索引来快速...
  • vector是表示可变大小数组的序列容器。简单地说,vector是一个能够存放任意类型的动态数组,能够增加压缩数据。 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素...
  • C++ vector 实现二维数组

    千次阅读 2020-12-24 02:02:03
    在STL中Vector这一容器,无论是在封装程度还是内存管理等方面都由于传统C++中的数组。本文主要是关于使用Vector初始化、遍历方面的内容。其他二维的思想也是类似的。这里简单叙述一下C++ 构建二维动态数组int **p;p ...
  • 1、vector容器内元素的访问: ①通过下标进行访问: 这种访问正常的数组类似,只是需要注意的是,需要用push_back将元素放入数组中; #include <iostream> #include <vector> using namespace std; ...
  • 展开全部Vector是一个容器,e68a84e8a2ad62616964757a686964616f31333337613261可以容纳不同类型的对象,数组也可以。比如有个int型数组:intdata1[]={1,2,3};放入vector:v.addElement(data1);然后可以这么取:for...
  • 1 vector二维数组的创建初始化std::vector vec(10,90); //将10个一维动态数组初始为90std::vector > vec(row,vector(col,0)); //初始化row * col二维动态数组,初始化值为02 获取一维数组的长度int size = vec....
  • vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。在数据结构当中我们可以使用vector来充当链表的作用,vector 是C++ STL的一个重要成员,使用它时需要包含头文件: #include <...
  • C++ vector容器详解

    2021-10-27 19:31:11
    C++ vector容器详解目录vector容器的基本概念1.vector的构造函数2.vector的赋值操作3.vector的容量与大小4.vector的插入删除5.vector数据存取6.vector互换容器7.vector预留空间写在最后 目录 vector容器的基本概念...
  • #include<iostream> #include<vector> using namespace std;... // 上述 仍可以用普通数组初始化形式表示 例: vector<int> v={6,6,6}; void print_v(){ for(auto i:v) cout <.
  • 一、int 数组 方法1: 大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。 int arr[5] = {1, 2, 3}; 方法2: ...
  • vector数组的初始化

    2021-02-25 21:49:40
    容器的大小(长度)可以自动增长,从而可以包含任意数量的元素,只要元素个数超出 vector 当前容量,就会自动分配更多的空间。 但是只能在容器尾部高效地删除或添加元素。 二.vector数组的创建 vector<type>...
  • erase(it)erase(first,last) 4. vector常见用途 1.存储数据 2.用邻接表存储图 1.vector的定义 1.1 单独定义vector vector<typename> name; 其中typename可以是基本类型,如 vec..
  • C++中输出数组数据分两种情况:字符型数组和非字符型数组 字符型数组 cout << 数组名——字符串 //以字符的形式初始化 char str[10] = { '1','2' };//12 //以字符串的形式初始化 char str_array[10] = {"jiang...
  • 多维数组 // 一维数组 int codes1[10] = {1,2,3}; // 二维数组 int codes2[5][10] = {{1,2},{4,5},{},{},{1,2,3,4,5,6,7,8,9,200}}; //{1,2,3,4,5,6,7,8,9,0,123/*codes2[1][0]*/};*/ cout << "codes2[1...
  • deque是一个双端数组的好处就是,在头部的插入删除很容易,因为头部有开口,但是对于vector容器而言,因为他是一个单端数组,所以它在进行头插的时候,必须要将所有的元素都往后面挪一位,当数据量大的时候,效率...
  • array和vector数组三者区别联系 共同点 不同点 本文基于邓俊辉编著《数据结构(C++语言版)(第3版)》、《C++ Primer(第5版)》以及网上的相关博文而写,博主水平有限,若有不妥处,欢迎指出。 一、数组 C++中...
  • 【C++】vector数组排序

    千次阅读 2021-05-23 15:06:02
    vector是C++的STL中一个重要的容器嘛,STL不用说也知道它的功能十分强大,所以有一些内置排序函数。下面来细说一下。 一.简单升序排序 (1)准备 vector头文件,用来引入vector数组 algorithm头文件,用来引入...
  • //元素0变量arr均储存在栈区 动态数组:元素储存在堆区 //变量arr储存在栈区 int *arr=new int[10]();//arr10个元素均为0,元素在堆区 delete []arr; std::vector:元素一般储存在堆区 std::vector<int>...
  • 3 字符串、容器和数组1 字符串string1.1 字符串string的一些操作1.2 对string对象中的字符操作2 容器vector和迭代器2.1 容器2.2 迭代器3.3数组3.3.1复杂数组3.3.2 C风格字符串3.3.3 数组和指针 1 字符串string 标准...
  • 要求输出数组a中不重复的数且保持相对位置不变。 #include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { int a[10] = {3,5,3,7,1,3,9,5,8,4}; vector&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 98,662
精华内容 39,464
关键字:

vector容器和数组