当前位置: 首页 > news >正文

C++中vector类的使用

目录

1.vector类常用接口说明

1.1默认成员函数

1.1.1构造函数(constructor)

1.1.2 赋值运算符重载(operator=())

2. vector对象的访问及遍历操作(Iterators and Element access)

3.vector类对象的容量操作(Capacity)

4. vector类对象的修改及相关操作(Modifiers and String operations)

5. 使用vector存储string对象以及实现二维数组


    C++中的vector对应与C语言中的顺序表,底层还是通过数组来存储数据的。可以参考用C语言实现顺序表。vector和string不一样的是vector是类模板,类模板只能显式实例化。vector是STL中一种重要的数据结构。C++之所以设计STL就是为了统一各种数据结构的接口,所以下面介绍的vector的接口在使用上与string等其他数据结构具有相同的用法。

#include <iostream>
#include <vector>using namepsace std;int main()
{vector<int> v1;    //类模板只能显示实例化return 0;
}

1.vector类常用接口说明

        vector类的接口我按照C++函数网址进行介绍,这里只进行常用接口的介绍,其他接口、类中的函数参数和函数重载若有需要请参考该网址,下列介绍就不一一列出了。vector的接口和string的接口很相似,可以参考C++中string类的使用进行对比。

1.1默认成员函数

1.1.1构造函数(constructor)

        这里的默认构造其实和string类类似,这里就不一一说明了。

#include<iostream>
#include<vector>
#include<string>
using namespace std;void test_vector1()
{//1.defaultvector<int> v1;	//size == 0 capacity == 0for (auto e : v1){cout << e << " ";}cout << endl;//2.fillvector<int> v2(10, 1);	//用n个值进行初始化for (auto e : v2){cout << e << " ";}cout << endl;//3.rangevector<int> v3(++v2.begin(), --v2.end());	//用迭代器区间进行构造vector<int>::iterator it = v3.begin();	//通过迭代器进行遍历while (it != v3.end()){cout << *it << " ";it++;}cout << endl;//4.copyvector<int> v4 = v2;for (auto e : v4){cout << e << " ";}cout << endl;//5.initializer listvector<int>v5 = { 0,3,5,6,9,3,0 };for (auto e : v5){cout << e << " ";}cout << endl;
}int main()
{test_vector1();return 0;
}

1.1.2 赋值运算符重载(operator=())

#include<iostream>
#include<vector>
#include<string>
using namespace std;void test_vector2()
{vector<int> v1(10, 1);//1.copyvector<int> v2;v2 = v1;for (auto& e : v2){cout << e << " ";}cout << endl;//1.initializer listvector<int> v3;v3 = { 1,2,3,4,5,6 };for (auto& e : v3){cout << e << " ";}cout << endl;
}int main()
{    test_vector2();return 0;
}

2. vector对象的访问及遍历操作(Iterators and Element access)

         vector对象的访问及遍历操作和string基本上是一模一样的,并且两个数据结构的底层都是通过数组进行实现的,参考C++中string类的使用即可。

3.vector类对象的容量操作(Capacity)

#include<iostream>
#include<vector>
#include<string>
using namespace std;void TestVectorExpand()
{//vs下是1.5倍扩容,g++下是两倍扩容size_t sz;vector<int> v;//v.reserve(99);	最少开n个sz = v.capacity();cout << "making v grow:\n";cout << "capacity changed: " << sz << "\n";for (int i = 0; i < 100; ++i){v.push_back(i);if (sz != v.capacity()){sz = v.capacity();cout << "capacity changed: " << sz << "\n";}}
}void test_vector3()
{//1.size//2.capacity//3.emptyvector<int> v1(10, 1);cout << v1.size() << endl;cout << v1.capacity() << endl;cout << v1.empty() << endl;v1.clear();cout << endl;cout << v1.size() << endl;cout << v1.capacity() << endl;cout << v1.empty() << endl;cout << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl;TestVectorExpand();//不缩容,不改变sizevector<int> v2(10, 1);v2.reserve(20);cout << v2.size() << endl;cout << v2.capacity() << endl;cout << endl;v2.reserve(15);cout << v2.size() << endl;cout << v2.capacity() << endl;cout << endl;v2.reserve(5);cout << v2.size() << endl;cout << v2.capacity() << endl;cout << endl;cout << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl;vector<int> v3(10, 1);for (auto& e : v3){cout << e << " ";}cout << v3.size() << endl;cout << v3.capacity() << endl;cout << endl;//vs不缩容,如果小于n < size,则缩到n,如果size < n < capacity,把size变为n, 如果n > capacity则扩容之后把size变为nv3.resize(15, 2);for (auto& e : v3){cout << e << " ";}cout << endl;cout << v3.size() << endl;cout << v3.capacity() << endl;cout << endl;v3.resize(25, 3);for (auto& e : v3){cout << e << " ";}cout << endl;cout << v3.size() << endl;cout << v3.capacity() << endl;cout << endl;v3.resize(5);for (auto& e : v3){cout << e << " ";}cout << endl;cout << v3.size() << endl;cout << v3.capacity() << endl;
}int main()
{test_vector3();return 0;
}

4. vector类对象的修改及相关操作(Modifiers and String operations)

#include<iostream>
#include<vector>
using namespace std;void test_vecotr4()
{vector<int> v(10, 1);v.push_back(2);v.insert(v.begin(), 5);for (auto& e : v){cout << e << " ";}cout << endl;v.insert(v.begin() + 3, 3);for (auto& e : v){cout << e << " ";}cout << endl;v.pop_back();for (auto& e : v){cout << e << " ";}cout << endl;v.erase(v.begin(), v.begin() + 3);for (auto& e : v){cout << e << " ";}cout << endl;
}int main()
{test_vector4();return 0;
}

5. 使用vector存储string对象以及实现二维数组

#include<iostream>
#include<vector>
#include<string>
using namespace std;void test_vector5()
{vector<string> v1;string s1 = "xxxxx";v1.push_back(s1);v1.push_back("yyyyy");	//隐式类型转换for (auto& e : v1)		{cout << e << " ";}cout << endl;//二维数组,初始化一个10*5的二维数组vector<int> v(5, 1);	//初始化行vector<vector<int>> vv(10, v);    //初始化列vv[2][1] = 2;for (size_t i = 0; i < vv.size(); i++){for (size_t j = 0; j < vv[i].size(); j++){cout << vv[i][j] << " ";}cout << endl;}
}int main()
{    test_vector5();return 0;
}

 

 

相关文章:

C++中vector类的使用

目录 1.vector类常用接口说明 1.1默认成员函数 1.1.1构造函数(constructor) 1.1.2 赋值运算符重载(operator()) 2. vector对象的访问及遍历操作(Iterators and Element access) 3.vector类对象的容量操作(Capacity) 4. vector类对象的修改及相关操作(Modifiers and Stri…...

cmaklist流程控制——调试及发布

cmaklist流程控制 目前只会配置-编译调试-打包发布&#xff0c;并且不会workflow控制 后续学习配置-编译调试-测试-打包发布&#xff0c;workflow控制&#xff0c;理解整个流程&#xff0c;目前对流程控制理解也不够。 1.CMake Presets 先于Cmakelist文件&#xff0c;指导项…...

制作一个能对话能跳舞的otto机器人

OTTO机器人是一个开源外壳&#xff0c;硬件和软件的桌面机器人项目&#xff0c;非常适合新手研究和拓展。记住&#xff0c;他是一个能移动有表情能声音的机器人。 b站有很多演示和组装的视频&#xff0c;我就不多说了&#xff0c;照着做就好&#xff0c;因为硬件我也是刚入门&…...

git配置SSH

1 打开cmd窗口 2 在窗口中输入如下命令&#xff1a; 配置用户名&#xff1a; git config --global user.name “gyk” 配置邮箱&#xff1a; git config --global user.email “247929163qq.com” 继续在Git命令窗口中输入如下命令&#xff0c;即可生成SSH公钥和私钥 ss…...

mozilla/pdf.js view.html加载指定页码

mozilla/pdf.js view.html加载指定页码 在Mozilla’s PDF.js中&#xff0c;如果你想要在viewer.html加载时直接跳转到指定的页码&#xff0c;你可以通过修改URL来实现。 PDF.js使用查询参数来处理URL&#xff0c;其中page参数用于指定页码。你可以通过修改URL的查询字符串来设…...

Qt之QFuture理解

结构 #mermaid-svg-J9J683RG8QjtEqoM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-J9J683RG8QjtEqoM .error-icon{fill:#552222;}#mermaid-svg-J9J683RG8QjtEqoM .error-text{fill:#552222;stroke:#552222;}#merm…...

求二叉树的高度(递归和非递归)

假设二叉树采用二叉链表存储结构&#xff0c;设计一个算法求二叉树的高度。 递归&#xff1a; int getTreeHight(BiTree T){if(TNULL){return 0;}else {int lh getTreeHight(T->lchild);int rh getTreeHight(T->rchild);return (lh>rh?lh:rh)1;}}时间复杂度O(n)&a…...

Java查找算法——(四)分块查找(完整详解,附有代码+案例)

文章目录 分块查找1.1普通分块查找 分块查找 1.1普通分块查找 分块原则&#xff1a; 块内无序&#xff0c;块间有序:前一块中的最大数据&#xff0c;小于后一块中所有的数据&#xff0c;块与块之间不能有数据重复的交集。块的数量一般等于数字个数开根号 核心思路&#xff…...

进制数知识(2)—— 浮点数在内存中的存储 和 易混淆的二进制知识总结

目录 1. 浮点数在内存中的存储 1.1 浮点数的大V表示法 1.2 浮点数的存储格式 1.3 浮点数的存入规则 1.4 浮点数的读取规则 1.5 补充&#xff1a;移码与掩码 1.6 题目解析 2. 易错的二进制知识 2.0 符号位到底会不会参与运算&#xff1f; 2.0.1 存储前的编码变化运算 …...

类似QQ聊天功能的Java程序

实现一个类似QQ聊天功能的Java程序需要考虑以下几个关键点&#xff1a; 用户界面&#xff1a;用于展示消息和输入消息。网络通信&#xff1a;用于客户端之间的信息传输。用户管理&#xff1a;用于管理用户的登录、注册和状态。消息存储&#xff1a;用于存储聊天记录。 这里提…...

Redis 键值对数据库学习

目录 一、介绍 二、安装以及连接 三、设置连接密码 四、连接报错 五、redis 操作字符串以及过期时间 六、 redis 列表操作 七、redis 集合操作 八、hash 哈希操作 九、redis 发布和订阅操作 十、RDB和AOF的两种数据持久化机制 十一、 其他机器连接redis 十二、 pyt…...

逆向推理+ChatGPT,让论文更具说服力

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 使用ChatGPT辅助“逆向推理”技巧&#xff0c;可以显著提升论文的质量和说服力。逆向推理从结论出发&#xff0c;倒推所需的证据和论点&#xff0c;确保整个论证过程逻辑严密且无漏洞。…...

「JavaScript深入」一文说明白JS的执行上下文与作用域

JavaScript深入 — 执行上下文与作用域 上下文执行上下文生命周期创建阶段执行阶段回收阶段 执行栈作用域链作用域词法作用域&#xff08;静态作用域&#xff09; 上下文 变量或函数的上下文决定了它们可以访问哪些数据&#xff0c;以及它们的行为。 每个上下文都有一个关联的…...

Qt C++设计模式->组合模式

组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;允许你将对象组合成树形结构以表示部分与整体的层次关系。组合模式使得客户端可以以统一的方式对待单个对象和组合对象&#xff0c;简化了对复杂树形结构的操作。 组合模式的应用场景 组合…...

Acwing Bellman-Ford SPFA

1. Bellman-Ford 该算法适用于有负权边的情况&#xff0c;注意&#xff1a;如果有负权环的话&#xff0c;最短路就不一定存在了。时间复杂度 O ( m n ) . O(mn). O(mn).该算法可以求出来图中是否存在负权回路&#xff0c;但求解负权回路&#xff0c;通常用SPFA算法&#xff0c…...

我能禁止使用某协议的ip禁止访问我的资源吗

是的&#xff0c;你可以禁止使用某个协议的IP地址访问你的资源。这种操作通常涉及网络防火墙、服务器配置或应用程序设置&#xff0c;具体方法取决于你的网络环境和使用的技术。以下是一些常见的实现方法&#xff1a; 1. 使用防火墙 大多数防火墙&#xff08;硬件或软件&…...

快速理解TCP协议(二)——TCP协议中的拥塞控制机制详解

在计算机网络中&#xff0c;TCP&#xff08;传输控制协议&#xff09;是一种广泛使用的面向连接的、可靠的、基于字节流的传输层通信协议。TCP协议通过一系列复杂的机制来确保数据的可靠传输&#xff0c;其中拥塞控制是至关重要的一环。本文将深入探讨TCP协议中的拥塞控制机制&…...

Linux:debug: systemtap: ubacktrace

https://docs.huihoo.com/systemtap/sourceware.org/systemtap/SystemTap_Beginners_Guide/ustack.html 这个函数可以帮助将user level的backtrace打印出来。 stap -d /bin/ls --ldd \ -e probe process("ls").function("xmalloc") {print_usyms(ubacktra…...

使用AI进行需求分析的案例研究

生成式 AI 的潜在应用场景似乎无穷无尽。虽然这令人兴奋&#xff0c;但也可能让人不知所措。因此&#xff0c;团队在使用这项技术时需要有明确的目标&#xff1a;关键是要明确生成式 AI 在团队工作中能产生哪些实质性影响。 在软件工程中&#xff0c;一个引人注目的应用场景是…...

Python内置的re库

Python内置的re库是专门用于处理正则表达式的标准库。它提供了一系列函数和类&#xff0c;使得在Python程序中可以使用正则表达式进行字符串的搜索、替换、分割等操作。re库的使用非常广泛&#xff0c;几乎任何需要复杂文本处理的场景都可以用到它。 主要函数 1、complie函数…...

毕业设计选题:基于ssm+vue+uniapp的面向企事业单位的项目申报小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…...

jQuery 简介⑤属性操作

九、属性操作 jQuery的属性操作方法一览表 $("selector").val(); // 获取第一个匹配元素的value值(一般用于表单控("selector").val("Hello"); // 设置所有匹配元素的value值为"Hello" $("selector").html();// 获取第一个…...

[Linux] Linux操作系统 进程的状态

标题&#xff1a;[Linux] Linux操作系统 进程的状态 个人主页&#xff1a;水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一、前置概念的理解 1.并行和并发 2.时间片 3.进程间具有独立性 4.等待的本质 正文开始&#xff1a; 在校的时候&#xff0c;你一定学过《…...

深入解析Python 中的 sortedcontainers 库:高效的排序数据结构

在日常的 Python 编程中&#xff0c;列表&#xff08;list&#xff09;、集合&#xff08;set&#xff09;和字典&#xff08;dict&#xff09;是常用的数据结构。然而&#xff0c;在某些特定的场景下&#xff0c;我们需要对数据进行排序&#xff0c;并且希望在插入、删除或访问…...

什么是服务器日志,日志有什么作用?

前言 服务器日志是指服务器等电脑设备或软件的运作记录‌。这些日志记录了服务器接收客户端处理请求的过程以及服务器对这些请求的处理结果。服务器日志对于排查和解决计算机系统和网络应用中的问题至关重要&#xff0c;因为它们包含了用于调试问题的消息、服务器状态以及其他…...

Codeforces Round 971 (Div. 4)A-G1题解

Codeforces Round 971 (Div. 4) A 就是b - a #include <bits/stdc.h> #define int long longusing namespace std;void solve() {int a, b;cin >> a >> b;cout << b - a << endl; }signed main() {ios::sync_with_stdio(false);cin.tie(0);co…...

QT----基于QML的计时器

赶上了实习的末班车,现在在做QML开发,第一天的学习成果,一个计时器.逻辑挺简单的,纯QML实现,代码在仓库,可以对比文档和提交记录学习起来更清晰 QT-Timer 学习使用c的listmodel 学习使用了如何用c的listmodel来存储数据. 新建一个TImeListModel类继承自QAbstractListModel c…...

Stable Diffusion的高分辨率修复(Hires.fix)

Stable Diffusion的高分辨率修复&#xff08;Hires.fix&#xff09;是一项重要的功能&#xff0c;它旨在提高生成图像的分辨率和细节&#xff0c;从而使画面变得更加清晰和精细。以下是关于Stable Diffusion高分辨率修复&#xff08;Hires.fix&#xff09;的详细解释&#xff1…...

智慧体育馆可视化:实时监控与智能管理

利用图扑可视化技术实现对体育馆的实时监控和数据分析&#xff0c;提升运营效率、观众体验和安全管理水平&#xff0c;打造智能化场馆环境。...

【NLP】基于“检测器-纠错器”中文文本纠错框架

前言 许多方法将中文拼写纠正&#xff08;检测和纠正给定中文句子中的错误字符&#xff09;视为序列标注任务&#xff0c;并在句子对上进行微调。一些方法使用错误检测器作为初步任务&#xff0c;然后将检测结果用于辅助后续的错误纠正过程。然而&#xff0c;现有方法在使用检…...