3.3.0 模板(Template)

vector说明

  • vector是含有相同类型的对象的集合(a collection of objects which have the same type)
  • 引用(reference)不是对象,所以无法建立引用的vector
  • vector本身不是类,而是一个类模板

模板简介

  • 分类:类(class)模板、函数模板

  • 类(class)模板本身不是类,但它给出了创建类(class)的一种方式,只要给定额外信息(addtional information),就能创建出对应的类(class),额外信息用尖括号括住。函数模板同理。

  • 编译器用模板来创建类或者函数的过程称为实例化(instantiation)

  • 对于vector来说,额外信息就是vector内存储的对象的类型(type)

    vector<int> v1; //给vecotr模板指定要存储的对象类型int,生成vector<int>类,v1是类vector<int>的对象
    vector<string> v2; //给vecotr模板指定要存储的对象类型string,生成vector<string>类,v2是类vector<string>的对象

3.3.1 vector的定义和初始化

初始化的方式

  • 默认初始化vector<int> v1

    不做任何关于初始化的说明,调用默认构造函数。v1是一个空集合

  • 值初始化vector<int> v2(10)

    说明了v2的初始化大小为10,但没有指定这10个元素的值,默认为0

  • 直接初始化和拷贝初始化:分类依据是形式,底层关系暂不讨论

    • 直接初始化:直接调用构造函数。无等号=

      vector<int> v3(10,3); //v3有10个元素,且每个元素的值都为3
      //v2其实也算直接初始化,因为初始化时直接调用了构造函数,无等号
      vector<int> v4(v3); //将v3的值拷贝给v4
    • 拷贝初始化:将一个对象的拷贝给另一个对象。有等号=

      vector<int> v4 = v3;  //将v3的值拷贝给v4
  • 列表初始化:用{}直接列出元素

    vector<int> v5 = {1,2,3,4,5}; //v5有5个元素,分别为1,2,3,4,5【同时也是拷贝初始化】
    vector<int> v6{1,2,3,4,5}; //同上

注:上面几种分类方式是在不同维度上对初始化进行分类,会有交叉,如v5既是列表初始化又是拷贝初始化

说明,列表初始化时,如果内部的类型与vector存储对象的类型不同,编译器会继续把{}当成()处理,所以vector<string> v7{10}表示“v7含有10个字符,每个字符为空”,等价于vector<string> v7(10)【值初始化,直接初始化】。vector<string> v8{10,"hi"}等价于vctor<string> v8(10,"hi)

几个可供参考的博客

  1. 谈谈C++中各种初始化方式
  2. C++四种初始化方式
  3. C++的各种初始化方式

总结初始化

vector<int> v1;             //初始化为空

vector<int> v2 = v1;
vector<int> v2(v1); //初始值等于另一个vector vector<int> v3(10); //指定大小但不指定值
vector<int> v4(10,2); //指定大小且指定值 vector<int> v5{10,2,3};
vector<int> v5 = {10,2,3}; //直接给定元素

辨析

答案

3.3.2 往vector中添加元素

  • v.push_back(element)

    vector<int> v1;
    v1.push_back(1); //往v1中添加1
    int i = 2;
    v1.push_back(i); //往v1中添加i
  • 在范围for内部不能push_back()

3.3.3 vector的其他操作

  • 删除v1.pop_back()

  • vector支持下标操作与随机查找

  • 改 查 比较

  • 关于下标操作:超过v.size()-1的下标操作都是未定义的。不能用下标操作插入元素。

3-3 C++ vector类型的更多相关文章

  1. Spark DataFrame vector 类型存储到Hive表

    1. 软件版本 软件 版本 Spark 1.6.0 Hive 1.2.1 2. 场景描述 在使用Spark时,有时需要存储DataFrame数据到Hive表中,一般的存储方式如下: // 注册临时表 ...

  2. C++ vector类型要点总结

    概述 C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现. 容器向量也是一个类模板.vector是C++标准模 ...

  3. vector类型介绍

    一.vector类型简介 标准库:集合或动态数组,我们可以放若干对象放在里面. vector他能把其他对象装进来,也被称为容器 #include <iostream> #include & ...

  4. C++ vector类型要点总结(以及各种algorithm算法函数)

    概述 C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现. 容器向量也是一个类模板.vector是C++标准模 ...

  5. 【原创】【长期更新】【未完待续】自制vector类型

    继<自制string类型>以来的第二篇自制类型的文章.马上要开学了,时间也不多了,争取在今年写完吧. 目录 一,vector类型简单介绍 1.简介 1.1.STL 1.2.vector 2 ...

  6. C++标准库vector类型详解

    Vector简介 vector是定义在C++标准模板库,它是一个多功能.能够操作多种数据结构和算法的模板类(关于模板类我们后面会介绍,如何创建自己的模板类).vector是一个容器,能够像容器一样存放 ...

  7. C++标准库vector类型的使用和操作总结

    vector是一种类型对象的集合,它是一种顺序容器,容器中的所有对象必须都是同一种类型.想了解顺序容器的更多内容:C++顺序容器知识总结.vector的对象是可以动态生长的,这说明它在初始化时可以不用 ...

  8. C++ STL vector类型

    vector容器是一个模板类,可以存放任何类型的对象(但必须是同一类对象).vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的.注:vector容器内存放的所有对象都是经过 ...

  9. Rust中的Vector类型

    常用类型操作, 如python中的list,turple,dictory等, 更方常编程常用数据的处理. fn main() { let v = vec![, , , , ]; let third: ...

  10. C++ 标准库类型-String,Vector and Bitset

    <C++ Primer 4th>读书摘要 最重要的标准库类型是 string 和 vector,它们分别定义了大小可变的字符串和集合.这些标准库类型是语言组成部分中更基本的那些数据类型(如 ...

随机推荐

  1. Unix、Linux、GNU 关系梳理

    之前写了一篇 MSYS2.MinGW 和 Cygwin 关系梳理的博客,但是要讲清它们几个的关系最好还是先了解一下操作系统的发展历程.遂补充了这篇博客. UNIX:现代操作系统的始祖 Operatin ...

  2. Python批量分割Excel后逐行做差、合并文件的方法

      本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件,首先依据某一列数据的特征截取我们需要的数据,随后对截取出来的数据逐行求差,并基于其他多个文件夹中同样大量 ...

  3. 淘宝开放平台api申请,淘宝开放平台api租用,淘宝开放平台api无法申请,淘宝开放平台api暂停接入

    目前淘宝开放平台应用申请是关闭了的,已经无法申请到了,如果你是天猫店铺,可以申请供自己店铺使用的权限,如果你不是天猫店铺或者你是软件开发商,目前是申请不到权限的 如果你必须要用到这个权限包的话,可以联 ...

  4. AWS 认证

    Data Analytics: 准备先Fundamental, 然后Udemy 上买课程,在看Exam Readiness, 然后小测试一下水平,看白皮书,最后不行就 Guru上再买课程 https: ...

  5. LeetCode题集-1- 两数之和

    这个题目是什么意思呢?简单来说就是在一个数组中找出两个元素,使其和为我们设定的值,并且每个元素只能用一次. 如下图具体示例: 到这里不知道你是否已经有解题思路了呢? 解法一:双层循环 我第一反应就是双 ...

  6. C++ shared_ptr是线程安全的吗?

    导读:C++面试中有时会有这样一个问题,shared_ptr是线程安全的吗?对此问题,我们需要从三个并发场景进行考虑,拷贝shared_ptr的安全性.对shared_ptr赋值的安全性和读写shar ...

  7. 安全 – 常见 Web 攻击

    前言 最近在研究 WAF, 顺便记入一下常见的 Web 攻击. SQL Injection SQL injection 是指程序员直接拿 client input, 拼接到 SQL query 中. ...

  8. Go runtime 调度器精讲(八):sysmon 线程和 goroutine 运行时间过长的抢占

    原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 在 Go runtime 调度器精讲(七):案例分析 一文我们介绍了一个抢占的案例.从案例分析抢占的实现,并未涉及到源码层面.本文将继续从源码入 ...

  9. SpringMVC——SSM整合——项目异常处理

    项目异常处理 项目异常分类 业务异常 不规范的用户行为产生的异常    规范的用户行为产生的异常    系统异常 项目运行过程中可预计且无法避免的异常    其他异常 编程人员未预期到的异常    项 ...

  10. web架构-nginx负载均衡

    nginx的负载均衡 Nginx 是一个广泛使用的反向代理服务器,能够高效地实现负载均衡.负载均衡的核心作用是将来自客户端的请求分发到多个后端服务器上,从而平衡每台服务器的压力.通过Nginx,我们可 ...