- 博客(52)
- 收藏
- 关注
原创 c++小白学c++日常——STL简介
本文介绍了C++标准模板库(STL)的核心组件,包括容器、算法和迭代器。主要内容涵盖:1. STL容器分类:序列式容器(vector、array、deque等)、关联式容器(set、map等)及容器适配器(stack、queue等);2. 迭代器使用方法和分类;3. 常用STL算法(排序、查找等);4. 特殊容器bitset和string的用法;5. pair模板类的应用场景。文章还对比了不同容器的性能特点和使用场景,并提供了实用示例代码。最后提及了C++标准演进和比赛环境支持情况,适合程序设计竞赛选手参考
2025-07-05 12:32:55
580
原创 c++小白学c++日常——较复杂的语言简介
数组的声明形如a[d],其中,a是数组的名字,d是数组中元素的个数。在编译时,d应该是已知的,也就是说,d应该是一个整型的常量表达式。// 错误:d1 不是常量表达式// 正确:arr2 是一个长度为 42 的数组// 错误// 错误应该尽量将较大的数组定义为全局变量。因为局部变量会被创建在栈区中,过大(大于栈的大小)的数组会爆栈,进而导致 RE。如果将数组声明在全局作用域中,就会在静态区中创建数组。int weight;int value;Object *c;上例中定义了一个名为。
2025-07-04 14:16:12
600
原创 c++小白学c++日常——语言基础
include其实是一个预处理命令,意思为将一个文件「放」在这条语句处,被「放」的文件被称为头文件。也就是说,在编译时,编译器会「复制」头文件iostream中的内容,「粘贴」到这条语句处。这样,你就可以使用iostream中提供的std::cinstd::coutstd::endl等对象了。如果你学过 C 语言,你会发现目前我们接触的 C++ 中的头文件一般都不带.h后缀,而那些 C 语言中的头文件xx.h都变成了cxx,如stdio.h变成了cstdio。
2025-07-03 14:58:12
664
原创 visual studio code下载方式(保姆级教程)
然后点进去后,就可以等待下载了。我们直接双击打开,就会弹出这个窗口,先点我同意此协议(A),然后再点下一步。首先要选择一个工作文件夹,我这边选择了U盘上的文件夹,不过不建议使用U盘上的,因为每次进入都需要重新选择文件夹,不能自动配置。这还没完,还需要测试一下,打开cmd,输入g++.exe --version,如果像我这样输出,就是对了,如图。选好后直接下一步,然后再按一下下一步,这里可以选择创不创建桌面快捷方式,选完后点下一步,安装。接着打开任务栏,搜索“编辑用户的环境变量”,点击环境变量,如图所示。
2025-06-21 20:06:32
393
原创 c++的单调栈
将一个元素插入单调栈时,为了维护栈的单调性,需要在保证将该元素插入到栈顶后整个栈满足单调性的前提下弹出最少的元素。顾名思义,单调栈即满足单调性的栈结构。与单调队列相比,其只在一端进行进出。插入元素 14时为了保证单调性需要依次弹出元素 0,11,操作后栈变为。为了描述方便,以下举例及伪代码以维护一个整数的单调递增栈为例。自然就是从栈顶读出来一个元素,该元素满足单调性的某一端。例如,栈中自顶向下的元素为 {0,11,45,81}。例如举例中取出的即栈中的最小值。
2025-05-18 10:25:42
161
原创 c++的块状数据结构
其实,分块是一种思想,而不是一种数据结构。从 NOIP 到 NOI 到 IOI,各种难度的分块思想都有出现。分块的基本思想是,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。分块的时间复杂度主要取决于分块的块长,一般可以通过均值不等式求出某个问题下的最优块长,以及相应的时间复杂度。分块是一种很灵活的思想,相较于树状数组和线段树,分块的优点是通用性更好,可以维护很多树状数组和线段树无法维护的信息。
2025-05-18 09:47:52
1005
原创 c++的前世今生
C++的历史起源于1979年,当时Bjarne Stroustrup在AT&T贝尔实验室工作,他的目标是创建一种新编程语言,这种语言能够结合C语言的高效性和灵活性,同时加入面向对象编程(OOP)的特性以提高软件的可维护性和可扩展性。Stroustrup的工作最终导致了C with Classes的诞生,这是C++的前身。到了1983年,C with Classes正式更名为C++,标志着这门语言从C语言的一个增强版转变为一个独立的编程语言。
2025-05-17 19:19:17
511
原创 c++的堆
配对堆是一棵满足堆性质的带权多叉树(如下图),即每个节点的权值都小于或等于他的所有儿子(以小根堆为例,下同)。通常我们使用儿子 - 兄弟表示法储存一个配对堆(如下图),一个节点的所有儿子节点形成一个单向链表。每个节点储存第一个儿子的指针,即链表的头节点;和他的右兄弟的指针。这种方式便于实现配对堆,也将方便复杂度分析。T v;// T为权值类型// child 指向该节点第一个儿子,sibling 指向该节点的下一个兄弟。// 若该节点没有儿子/下个兄弟则指针指向 nullptr。
2025-05-17 17:22:08
565
原创 c++的并查集
合并时,选择哪棵树的根节点作为新树的根节点会影响未来操作的复杂度。而反 Ackermann 函数 a(n)的定义是阿克曼函数的反函数,即为最大的整数 m 使得A(m, n) <= n。并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节点表示对应集合中的元素。初始时,每个元素都位于一个单独的集合,表示为一棵只有根节点的树。方便起见,我们将根节点的父亲设为自己。为阿克曼函数的反函数,其增长极其缓慢,也就是说其单次操作的平均运行时间可以认为是一个很小的常数。
2025-05-17 16:48:54
594
原创 c++的哈希表
举个例子,如果键值是一个人的身份证号码,哈希函数就可以是号码的后四位,当然也可以是号码的前四位。在实际的应用中,键值可能是更复杂的东西,比如浮点数、字符串、结构体等,这时候就要根据具体情况设计合适的哈希函数。可以把哈希表理解为一种高级的数组,这种数组的下标可以是很大的整数,浮点数,字符串甚至结构体。查询的时候需要把对应位置的链表整个扫一遍,对其中的每个数据比较其键值与查询的键值是否一致。当键值的范围比较小的时候,可以直接把键值作为数组的下标,但当键值的范围比较大,比如以。这种方法虽然简单,但并不是完美的。
2025-05-17 16:33:04
687
原创 c++的链表
链表因其链状的结构,能方便地删除、插入数据,操作次数是 O(1)。但也因为这样,寻找、读取数据的效率不如数组高,在随机访问数据中的操作次数是 O(1)。由于链表首尾相连,在插入数据时需要判断原链表是否为空:为空则自身循环,不为空则正常插入数据。不同之处在于,指针域有左右(或上一个、下一个)之分,用来连接上一个结点、当前结点、下一个结点。,但它利用按位异或的值,仅使用一个指针的内存大小便可以实现双向链表的功能。可得到后一个元素的地址,反向遍历时用后一个元素的地址异或当前节点的。,从链表中删除它时,将。
2025-05-17 16:17:26
631
原创 c++的队列
使用数组模拟队列会导致一个问题:随着时间的推移,整个队列会向数组的尾部移动,一旦到达数组的最末端,即使数组的前端还有空闲位置,再进行入队操作也会导致溢出(这种数组里实际有空闲位置而发生了上溢的现象被称为「假溢出」)。队列(queue)是一种具有「先进入队列的元素一定先出队列」性质的表。解决假溢出的办法是采用循环的方式来组织存放队列元素的数组,即将数组下标为 0 的位置看做是最后一个位置的后继。双端队列是指一个可以在队首/队尾插入或删除元素的队列。通常用一个数组模拟一个队列,用两个变量标记队列的首尾。
2025-05-17 15:38:57
658
原创 c++的栈
栈的修改与访问是按照后进先出的原则进行的,因此栈通常被称为是后进先出(last in first out)表,简称 LIFO 表。栈是 OI 中常用的一种线性数据结构。请注意,本文主要讲的是栈这种数据结构,而非程序运行时的系统栈/栈空间。还提供了一些运算符。较为常用的是使用赋值运算符。C++ 中的 STL 也提供了一个容器。
2025-05-17 14:57:18
233
原创 c++小白学c++日常——数据结构
众所周知,知周所众。c++是一门非常复杂的语言,光数据结构就有三个大类。而我这个小白,就是来学习这门复杂的语言的。废话不多说,下面是正文部分。
2025-05-17 14:22:50
1692
原创 c++头文件介绍(acpiioct.h)
不同电脑可能会有差异,但是在Dev-Cpp后面的都一样。其实总结下来,就是(Dev-Cpp地址) + (头文件地址)。
2025-05-05 11:15:29
282
选择排序模版(c++)
2024-12-26
冒泡排序模版(c++)
2024-12-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人