• vector类型介绍


    一、vector类型简介

    标准库:集合或动态数组,我们可以放若干对象放在里面。

    vector他能把其他对象装进来,也被称为容器

    #include <iostream>
    #include <vector>
    using namespace std;
    
    struct student{int num;};
    
    int main()
    {
        vector<int> vjihe; // 表示这个集合对象保存的是int型数据
        // <int>:模板,vector本身就是个类模板,<int>实际上就是类模板的实例化过程。
        vector<student> vstudlist;// 存放学生类型的集合
        vector<vector<string>> strchuan; // 相当于二维的字符串。
        vector<int *> vjihe2;
        // 不能向集合中装引用
        //vector<int &> vjihe3; // 引用知识一个别名,不是对象。
        return 0;
    }

    二、定义和初始化vector对象

    (1)空的vector

    vector<string> mystr; // 创建一个string类型的空的集合
    //push_back()
    mystr.push_back(“abc”);
    mystr.push_back(“efg”);

    (2)元素拷贝的初始化方式

    vector<string> mystr2(mystr); // 将mystr元素拷贝给mystr2
    vector<string> mystr3 = mystr; // 将mystr元素拷贝给mystr3

    (3)C++11标准中,用列表初始化方法给值,用{}括起来

    vector<string> mystr4 = {“aaa”,”bbb”,”ccc”};

    (4)创建指定数量的元素

    // 创建15个int类型的元素,每个元素的值为-200
    vector<int> ijihe(15,-200);
    // 创建15个int类型的元素,每个元素的值为hello
    vector<string> sjihe(15,”hello”);
    
    vector<int> ijihe2(15); // 15个元素,每一个元素值默认为0
    vector<string> sjihe(15); // 15个元素,每一个元素值默认为空

    (5)多种初始化方式,()一般表示元素数量,{}一般表示元素内容这个概念,但不绝对。

    想要正常的通过{}初始化,那么{}里面值的类型,必须要跟vector后面这个<>里面的元素类型相同。

    vector<int> i1(10); // 表示创建10个元素,每个元素值为0
    vector<int> i2{10}; // 表示创建一个元素,该元素的值为10
    vector<string> snor{“hello”}; // 创建一个元素,元素内容为hello
    vector<string> s22{10}; // 10个元素,每个元素为空
    vector<string> s23{10,,”hello”}; // 10个元素,每一个元素内容为hello
    vector<int> i3(10,1);//10个元素,每个元素值为1
    vector<int> i4{10,1}; // 2个元素
    //vector<int> i4{“hello”}; // 语法错误

    三、vector对象上的操作

    最常用的是不知道vector里面有多少个元素,需要动态的增加/减少。

    一般情况下,先创建空的vector对象。

    (1)判断是否为空empty(),返回布尔值

    vector<int> ivec;
    if(ivec.empty())
    {
        cout << “ivec为空” << endl;
    }

    (2)push_back():用于向vector中的末尾添加一个元素

    ivec.push_back(1);
    ivec.push_back(2);
    for(int i = 3; i <= 100; i++)
    {
        ivec.push_back(i);
    }

    (3)size():返回元素个数

    cout << ivec.size() << endl;

    (4)clear():移除所有元素,将容器清空

    //ivec.clear();
    //cout << ivec.size() << endl;

    (5)ivec[n]:返回ivec中第n个元素(n是个整型值),位置从0开始,必须小于.size(),如果引用的下标超过这个范围,或者用[]访问了一个孔的vector,那么就会产生不可预测的结果,编译器发现不了。

    cout << ivec[1] << endl; // [0]:1 ,[1]:2

    (6)= 赋值

    vector<int> ivec2;
    ivec2.push_back(111);
    ivec2 = ivec; // ivec2得到了100个元素,ivec2原来的元素消失。
    ivec2 = {12,13,14,15}; // 用{}的值取代了ivec2中原来的值
    cout << ivec2.size() << endl;

    (7)==,!= 相等,不相等

    两个vector相等,元素数量相等,对应位置元素值也一样,否则就是不相等

    int ivec3 = ivec2;
    if(ivec3 == ivec2)
    {
        cout << “ivec3 == ivec2” << endl;
    }
    
    ivec3.push_back(3);
    if(ivec3 != ivec2)
    {
        cout << “ivec3 != ivec2” << endl;
    }
    
    ivec3.clear();
    ivec2.clear();
    if(ivec3 == ivec2)
    {
        cout << “ivec3 == ivec2” << endl;
    }

    (8)范围for的应用

    vector<int> vecvalue{1,2,3,4,5};
    for(auto &vecitem : vecvalue) // 引用起到修改变量的作用
    {
        vecitem *= 2;
    }
    
    for(auto vecitem : vecvalue)
    {
        cout << vecitem << endl;   // 2,4,6,8,10
    }

    (8)范围for的进一步理解

    for(auto vecitem : vecvalue)
    {
        //vecvalue.push_back(888); // 导致输出彻底乱套
        cout << vecitem << endl;
    }

    在for语句中遍历一个容器等等类似操作,千万不要改动vector容器的容量,增加/删除都不可以,否则会出问题。

  • 相关阅读:
    编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。
    编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt
    编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。
    事物 视图 与索引
    大家跟我一起涨知识(高级查询与分页)
    涨知识Style
    数据库打印图形
    SQL 编程
    新闻发布系统
    数据库分页储存
  • 原文地址:https://www.cnblogs.com/hs-pingfan/p/10428261.html
Copyright © 2020-2023  润新知