news 2026/4/23 13:06:21

C++学习记录-旧题新做-堆盘子

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++学习记录-旧题新做-堆盘子

旧题记录:

https://blog.csdn.net/chamao_/article/details/143775934?fromshare=blogdetail&sharetype=blogdetail&sharerId=143775934&sharerefer=PC&sharesource=chamao_&sharefrom=from_link

C++解法:

class StackOfPlates { private: vector<vector<int>> stacks; int cap; public: StackOfPlates(int cap) { this -> cap = cap; } void push(int val) { if (cap == 0) return; if (stacks.empty() || stacks.back().size() == cap) { stacks.push_back(vector<int>()); } stacks.back().push_back(val); } int pop() { if (stacks.empty()) return -1; int val = stacks.back().back(); stacks.back().pop_back(); if (stacks.back().empty()) { stacks.pop_back(); } return val; } int popAt(int index) { if (index < 0 || index >= stacks.size() || stacks[index].empty()) return -1; int val = stacks[index].back(); stacks[index].pop_back(); if (stacks[index].empty()) { stacks.erase(stacks.begin() + index); } return val; } }; /** * Your StackOfPlates object will be instantiated and called as such: * StackOfPlates* obj = new StackOfPlates(cap); * obj->push(val); * int param_2 = obj->pop(); * int param_3 = obj->popAt(index); */

今天来了解vector的常用接口:

一、vector 是什么(一句话)

std::vector<T>

👉动态连续数组

  • 内存连续

  • 支持随机访问O(1)

  • 尾部插入 / 删除高效


二、容量 & 状态相关(非常常用)

1️⃣ size()

v.size();

  • 返回当前元素个数

  • 类型是size_t(无符号)

⚠️ 注意:

for (int i = 0; i < v.size(); ++i) // 潜在警告

更安全:

for (size_t i = 0; i < v.size(); ++i)


2️⃣ empty()

v.empty();

  • 是否为空

  • size() == 0更语义化


3️⃣ capacity()

v.capacity();

  • 当前分配的最大容量

  • ≥ size()


4️⃣ reserve(n)

v.reserve(100);

  • 提前分配内存

  • 避免频繁扩容(性能优化)

⚠️ 不改变 size!


5️⃣ resize(n)

v.resize(5);

  • 改变size

  • 扩大 → 用默认值填充

  • 缩小 → 多余元素被销毁


三、元素访问(刷题必会)

6️⃣ operator[]

v[i];

  • O(1)

  • 不做越界检查(最快)


7️⃣ at()

v.at(i);

  • 越界会抛std::out_of_range

  • 调试时更安全


8️⃣ front() / back()

v.front(); // 第一个 v.back(); // 最后一个

⚠️ vector 不能为空!


9️⃣ data()

int* p = v.data();

  • 返回底层连续内存指针

  • 可与 C API / memcpy 交互


四、修改元素(核心操作)

🔟 push_back()

v.push_back(x);

  • 尾插

  • 均摊 O(1)


1️⃣1️⃣ emplace_back()

v.emplace_back(1, 2);

  • 原地构造

  • 避免临时对象(性能更优)


1️⃣2️⃣ pop_back()

v.pop_back();

  • 删除最后一个

  • 不返回值


1️⃣3️⃣ insert()

v.insert(v.begin() + i, x);

  • 在任意位置插入

  • O(n)(元素搬移)


1️⃣4️⃣ erase()

v.erase(v.begin() + i);

或区间:

v.erase(v.begin(), v.begin() + 3);

  • 删除元素

  • 后续元素前移


1️⃣5️⃣ clear()

v.clear();

  • 清空所有元素

  • capacity 不变


五、迭代器相关(工程 & STL 算法)

1️⃣6️⃣ begin() / end()

for (auto it = v.begin(); it != v.end(); ++it) { ... }


1️⃣7️⃣ rbegin() / rend()

for (auto it = v.rbegin(); it != v.rend(); ++it) { ... }


1️⃣8️⃣ cbegin() / cend()

for (auto it = v.cbegin(); it != v.cend(); ++it) { ... }

  • 返回const_iterator


六、赋值 & 构造相关

1️⃣9️⃣ 构造函数

vector<int> v1; // 空 vector<int> v2(5); // 5 个 0 vector<int> v3(5, 3); // 5 个 3 vector<int> v4 = {1,2,3}; // 初始化列表 vector<int> v5(v4); // 拷贝构造


2️⃣0️⃣ assign()

v.assign(5, 10); // 5 个 10


2️⃣1️⃣ swap()

v1.swap(v2);

  • O(1)

  • 常用于快速清空内存

vector<int>().swap(v);

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:33:15

AppSmith零代码开发:5分钟搭建你的第一个企业级应用

AppSmith零代码开发&#xff1a;5分钟搭建你的第一个企业级应用 【免费下载链接】appsmith appsmithorg/appsmith: Appsmith 是一个开源的无代码开发平台&#xff0c;允许用户通过拖拽式界面构建企业级Web应用程序&#xff0c;无需编写任何后端代码&#xff0c;简化了软件开发流…

作者头像 李华
网站建设 2026/4/16 7:48:11

小样本学习:如何用少量数据训练高性能CRNN模型

小样本学习&#xff1a;如何用少量数据训练高性能CRNN模型 &#x1f4d6; 技术背景与问题提出 在OCR&#xff08;光学字符识别&#xff09;领域&#xff0c;高质量标注数据的获取成本极高&#xff0c;尤其是中文场景下&#xff0c;字体多样、背景复杂、光照不均等问题使得模型泛…

作者头像 李华
网站建设 2026/4/19 13:48:39

10个必知Docker命令实战案例解析

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个Docker命令实战案例展示平台&#xff0c;包含10个典型应用场景&#xff1a;1) 多容器编排 2) 日志查看与分析 3) 资源监控 4) 数据卷管理 5) 网络配置等。每个案例提供&am…

作者头像 李华
网站建设 2026/4/16 12:16:27

Wan2.1架构新突破:14B参数图像转换模型如何实现效率倍增?

Wan2.1架构新突破&#xff1a;14B参数图像转换模型如何实现效率倍增&#xff1f; 【免费下载链接】Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v 项目地址: https://ai.gitcode.com/hf_mirrors/lightx2v/Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v …

作者头像 李华
网站建设 2026/4/18 17:02:57

【原创实践】LangChain + Qwen 智能体项目完整解析:构建RPA自动化操作代理

摘要 本文将详细介绍一个基于LangChain和Qwen模型的智能体项目&#xff0c;该项目能够自动化操作以RuoYi为实例。通过Playwright浏览器自动化技术&#xff0c;结合自定义工具&#xff0c;实现用户管理、表格导出、页面导航等功能的智能化操作。 项目结构 本项目主要包含以下几个…

作者头像 李华
网站建设 2026/4/22 18:31:37

OCR识别结果结构化:CRNN的后处理

OCR识别结果结构化&#xff1a;CRNN的后处理 &#x1f4d6; 项目简介 在现代信息自动化系统中&#xff0c;OCR&#xff08;光学字符识别&#xff09; 技术已成为连接物理文档与数字世界的关键桥梁。从发票扫描、证件录入到智能客服问答&#xff0c;OCR 的应用场景无处不在。然而…

作者头像 李华