c语言入门到c++使用高手:深入学习C++之基本语言(八)

第二章 基本语言

第八节 vector类型介绍

1. vector类型简介

  • 标准库:集合或者动态数组,我们可以把若干对象放在里边

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

#include <vector>

//    表示的是vint里边保存的是int型数据(int型对象)
    vector<int> vint;
//    <int>:模板, vector本身就是类模板,<int>实际上就是类模板的实例化过程
  • vector 当成类型(残缺的类类型), vector:在vector之后加一对<>,<>内部放上类型信息,这样才算是完整的类类型
#include <iostream>
#include <string>
#include <vector>

struct student {
    int num;
};

using namespace std;

int main() {
    vector<student> stulist;
//    容器vector里面有都是一个vector<string>对象,集合套集合,用法可行
    vector<vector<string>> vecVecStr;
//  往容器中装指针
    vector<int *> vpoints;
    
//    引用是个别名,不是个对象,不是对象不能往容器中放,不可行
//    vector<int &> vyinyong;

    return 0;
}

2. 定义和初始化vector对象

  • 空vector
#include <iostream>
#include <string>
#include <vector>


using namespace std;

int main() {
//    创建了一个string类型的空的vector对象(容器),目前vStr里不包含任何元素
    vector<string> vStr;

    vStr.push_back("I AM");
    vStr.push_back("Felaim");
    
    return 0;
}
  • 元素拷贝的初始化方式
#include <iostream>
#include <string>
#include <vector>


using namespace std;

int main() {
    vector<string> vStr;
    vStr.push_back("I AM");
    vStr.push_back("Felaim");
    
//    把元素拷贝给了vStr1和vStr2
    vector<string> vStr1(vStr);
    vector<string> vStr2 = vStr;

    return 0;
}
  • c++11标准中,用列表初始化方法来给值,用{}括起来
#include <iostream>
#include <string>
#include <vector>


using namespace std;

int main() {
    vector<string> vStr{"111", "hahha", "FELAIM"};

    return 0;
}
  • 创建指定数量的元素,有元素数量概念的对象一般会用()
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
//    创建15个int类型的元素,每个元素的值是99
    vector<int> vint(15, 99);

    vector<string> vstr(5, "LOVE");

    vector<int> vint1(4);//定义4个元素,每个元素为0
    vector<string> vstr1(5); //定义5个元素,每个元素都为空串
    return 0;
}
  • 多种初始化方式,()一般表示元素数量,{}一般表示元素内容,但不绝对
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
    vector<int> i1(10); //定义是10个元素,每个元素为0
    vector<int> i2{10}; //定义一个元素,该元素值为10

    vector<string> snor{"hello"};//一个元素, "hello"
    vector<string> vs{10};//定义了10个空字符串

    vector<string> vs1{10, "love"};//10个元素,都为"love"
    vector<int> i3(10, 1);//10个元素都为1
    vector<int> i4{10, 2};//两个元素,一个为10,一个为2,等同于初始化列表

//    要想正常的通过{}进行初始化,那么{}里边的值的类型,必须要跟vector后边这个<>里边元素类型相同
    return 0;
}

3. vector对象上的操作

  • 最常用的是不知道vector里有多少个元素,需要动态增加/减少,所以,一般来讲,先创建空vector
    vector<int> vint;
  • 判断是否为空empty(),返回的是布尔值
 if (vint.empty()) {
        cout << "vint is empty!" << endl;
    } else {
        cout << "vint is not empty!" << endl;
    }
  • push_back:常用方法,用于vector中的末尾增加一个元素
vint.push_back(1);
vint.push_back(99);
  • size():返回元素个数
cout << "vint size is: " << vint.size() << endl;
  • clear():移除所有元素,将容器清空
vint.clear();
  • v[n]:返回v中的第n个元素,n代表位置,下标是从0开始的,下标不能越界
for (int i = 0; i < 10; i++) {
        vint.push_back(i);
    }
cout << vint[1] << endl;
  • = 赋值
vint1 = vint;
  • ==,!=:判断相等还是不相等,元素数量相同,对应位置的元素值也得相同
 vector<int> vint2 = vint;
    if (vint2 == vint) {
        cout << "vint2 = vint !" << endl;
    }
    vint2.push_back(1);
    if (vint2 != vint) {
        cout << "vint2 != vint !" << endl;
    }
    vint.clear();
    vint2.clear();
    if (vint2 == vint) {
        cout << "vint2 = vint !" << endl;
    }
  • 范围for的应用
 vector<int> vint3{1, 4, 6, 7};
    for (auto &v:vint3) {
        v = v * v;
    }
    for (auto v:vint3) {
        cout << v << " ";
    }
    cout << endl;
  • 完整范例
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() {
    vector<int> vint;
    if (vint.empty()) {
        cout << "vint is empty!" << endl;
    } else {
        cout << "vint is not empty!" << endl;
    }


    vint.push_back(1);
    vint.push_back(99);
    if (vint.empty()) {
        cout << "vint is empty!" << endl;
    } else {
        cout << "vint is not empty!" << endl;
    }

    cout << "vint size is: " << vint.size() << endl;

    vint.clear();
    cout << "vint size is: " << vint.size() << endl;

    for (int i = 0; i < 10; i++) {
        vint.push_back(i);
    }
    cout << vint[1] << endl;


    vector<int> vint1;
    vint1.push_back(12);
    vint1 = vint;//vint1得到了10个元素,原来的元素被覆盖掉了
    vint1 = {1, 3, 10};
    cout << vint1.size() << endl;

    vector<int> vint2 = vint;
    if (vint2 == vint) {
        cout << "vint2 = vint !" << endl;
    }
    vint2.push_back(1);
    if (vint2 != vint) {
        cout << "vint2 != vint !" << endl;
    }
    vint.clear();
    vint2.clear();
    if (vint2 == vint) {
        cout << "vint2 = vint !" << endl;
    }

    vector<int> vint3{1, 4, 6, 7};
    for (auto &v:vint3) {
        v = v * v;
    }
    for (auto v:vint3) {
        cout << v << " ";
    }
    cout << endl;

    return 0;
}
3.1 范围for进一步讲解
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() {

    vector<int> vint3{1, 4, 6, 7};
//    第一次进入循环后,系统会记住vint3结束的位置, 如果vint3添加或删除元素
//    输出的值就会混乱
    for (auto v:vint3) {
        vint3.push_back(111);//导致输出混乱,无法控制
        cout << v << " ";
    }
    cout << endl;

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值