3-3 C++ vector类型
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)
几个可供参考的博客
总结初始化
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类型的更多相关文章
- Spark DataFrame vector 类型存储到Hive表
1. 软件版本 软件 版本 Spark 1.6.0 Hive 1.2.1 2. 场景描述 在使用Spark时,有时需要存储DataFrame数据到Hive表中,一般的存储方式如下: // 注册临时表 ...
- C++ vector类型要点总结
概述 C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现. 容器向量也是一个类模板.vector是C++标准模 ...
- vector类型介绍
一.vector类型简介 标准库:集合或动态数组,我们可以放若干对象放在里面. vector他能把其他对象装进来,也被称为容器 #include <iostream> #include & ...
- C++ vector类型要点总结(以及各种algorithm算法函数)
概述 C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现. 容器向量也是一个类模板.vector是C++标准模 ...
- 【原创】【长期更新】【未完待续】自制vector类型
继<自制string类型>以来的第二篇自制类型的文章.马上要开学了,时间也不多了,争取在今年写完吧. 目录 一,vector类型简单介绍 1.简介 1.1.STL 1.2.vector 2 ...
- C++标准库vector类型详解
Vector简介 vector是定义在C++标准模板库,它是一个多功能.能够操作多种数据结构和算法的模板类(关于模板类我们后面会介绍,如何创建自己的模板类).vector是一个容器,能够像容器一样存放 ...
- C++标准库vector类型的使用和操作总结
vector是一种类型对象的集合,它是一种顺序容器,容器中的所有对象必须都是同一种类型.想了解顺序容器的更多内容:C++顺序容器知识总结.vector的对象是可以动态生长的,这说明它在初始化时可以不用 ...
- C++ STL vector类型
vector容器是一个模板类,可以存放任何类型的对象(但必须是同一类对象).vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的.注:vector容器内存放的所有对象都是经过 ...
- Rust中的Vector类型
常用类型操作, 如python中的list,turple,dictory等, 更方常编程常用数据的处理. fn main() { let v = vec![, , , , ]; let third: ...
- C++ 标准库类型-String,Vector and Bitset
<C++ Primer 4th>读书摘要 最重要的标准库类型是 string 和 vector,它们分别定义了大小可变的字符串和集合.这些标准库类型是语言组成部分中更基本的那些数据类型(如 ...
随机推荐
- Maven经验分享(五)Maven拷贝资源
上一章介绍使用ant拷贝资源,这里介绍maven拷贝资源,使用maven-resources-plugin插件. <plugin> <groupId>org.apache.ma ...
- .netcore生命周期、消息管道
.NET Core 的初始化过程涉及多个步骤,这些步骤从应用程序的启动开始,一直到应用程序准备好处理请求.下面是一个简化的概述,描述了 .NET Core 应用程序(特别是 ASP.NET Core ...
- 折腾 Quickwit,Rust 编写的分布式搜索引擎 - 可观测性之日志管理
Quickwit 从底层构建,旨在 高效地索引非结构化数据,并在云存储上轻松搜索这些数据. 此外,Quickwit 开箱即支持 OpenTelemetry gRPC 和 HTTP(仅 protobuf ...
- python pyqt6 设定窗口置顶
self.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint)即可效果一般,页面会出现闪烁一次, # 置顶按钮 self.top_button = QPu ...
- C++ : 如何用C语言实现C++的虚函数机制?
前言 在 googletest的源码中,看到gtest-matchers.h 中实现的MatcherBase 类自定义了一个 VTable,这种设计实现了一种类似于C++虚函数的机制.C++中的虚函数 ...
- KernelWarehouse:英特尔开源轻量级涨点神器,动态卷积核突破100+ | ICML 2024
动态卷积学习n个静态卷积核的线性混合,加权使用它们输入相关的注意力,表现出比普通卷积更优越的性能.然而,它将卷积参数的数量增加了n倍,因此并不是参数高效的.这导致不能探索n>100的设置(比典型 ...
- elementUI 时间线居左显示
elementUI 时间线居左显示 一.vue + elementUI 实现时间线 Timellne 中时间戳居左显示 二.效果图 三.实现方法 关键代码: <el-timeline> & ...
- iPay88 学习笔记
ipay88 学习笔记 之前弄过 MOLPay 现在弄 ipay88</p><p>差不多的概念 这里记入流程就好了 首先是做订单, 然后通过 merchant key + 订单 ...
- ASP.NET Core – Handle Error on Razor Page
前言 网站不应该有 error, 但它却必然会发生的, 所以给用户一个友好的 error 页面是很重要的. 主要参考 Handle errors in ASP.NET Core Development ...
- 【问题解决】remote: parse error: Invalid numeric literal at line 1, column 20,解决思路
问题现象 某同事出现过同样的推送到git仓库报错的问题,报错信息详情如下: Delta compresion using up to 20 threads Compressing objects: 1 ...