CPP语法、容器相关与易错点记录
文章平均质量分 77
c++语言的语法注意点和容器等
大磕学家ZYX
这个作者很懒,什么都没留下…
展开
-
DAY9:栈和队列(一):栈和队列基础
栈 - OI Wiki (oi-wiki.org)栈是 OI 中常用的一种线性数据结构,请注意,本文主要讲的是栈这种数据结构,而非程序运行时的系统栈/栈空间。栈的修改是按照后进先出的原则进行的,因此栈通常被称为是后进先出(last in first out)表,简称 LIFO 表。队列(queue)是一种具有「先进入队列的元素一定先出队列」性质的表。由于该性质,队列通常也被称为先进先出(first in first out)表,简称 FIFO 表。原创 2023-05-22 12:43:12 · 121 阅读 · 0 评论 -
std::find操作与stl中find成员函数的区别
这会消耗 O(n) 的时间(其中 n 是被删除元素后面的元素数量)。为了避免这个问题,你可能需要采用不同的策略,例如使用一个额外的数据结构来跟踪哪些元素被删除。在vector中用erase(),推荐用下面的写法:(find找到与nums[i]相等的第一个元素就会返回,不一定是nums[i]本身)此外,当修改 vector 的大小(例如通过调用 erase)时,需要特别注意不能超出其边界。中查找键值为 3 的元素,如果找到,我们打印出该键值。中查找值为 3 的元素,如果找到,我们打印出该元素。原创 2023-07-24 17:33:32 · 1110 阅读 · 0 评论 -
vector的动态扩容机制与下标越界问题
的自动扩容机制并不能防止数组下标越界的问题,需要防止下标越界可以用at()来访问vector元素。即使可以自动扩容,但是访问的元素还是需要确保下标在有效范围内,否则仍然会导致未定义行为。如果访问了中没有初始化的下标,那么可能会遇到任何数值,这是未定义的行为。在C++中,未定义的行为可能会导致程序崩溃,也可能会静默地继续运行,但产生错误的结果。原创 2023-07-24 15:19:56 · 1327 阅读 · 0 评论 -
CPP幂运算及常用数学函数
但是如果我们想要的是类似(-1)^i,i是奇数的时候结果为-1,i是偶数结果为1,根据 i 的奇偶性来决定一个因子是1还是-1,我们可以直接用。函数,这是C++标准库中的一个函数,可以计算浮点数的幂。,如果直接用来计算整数的幂,由于有。在C++和许多其他编程语言中,在C++中,如果想要计算。pow(a, b) 计算。,不需要担心它会报错。原创 2023-07-21 19:32:24 · 1462 阅读 · 0 评论 -
DAY5 哈希表(一):哈希表基础+数组练习+set容器练习
数组:数组是最基本的数据结构之一,它是由一系列相同类型的元素组成的,并且每个元素都有一个索引来标识它在数组中的位置。数组的优点是访问元素的速度非常快,因为只需要通过索引就可以直接找到元素,不需要遍历整个数组。但是,数组的大小在创建时就已经固定,不能动态增加或减少。Set:Set是一个不包含重复元素的集合。它的主要用途是进行存在性检查,也就是检查一个元素是否存在于集合中。Set通常是通过哈希技术实现的,所以检查元素是否存在的操作非常快,时间复杂度接近O(1)。原创 2023-05-15 18:24:06 · 268 阅读 · 0 评论 -
string容器语法
string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责。总结:字符串对比主要是用于比较两个字符串是否相等,判断谁大谁小的意义并不是很大。总结:string字符串中单个字符存取有两种方式,利用 [ ] 或 at。**总结:**灵活的运用求子串功能,可以在实际开发中获取有效的信息。总结:string的多种构造方式没有可比性,灵活使用即可。总结:字符串拼接的重载版本很多,初学阶段记住几种即可。**总结:**插入和删除的起始下标都是从0开始。 string的赋值方式很多,原创 2023-07-06 17:07:10 · 139 阅读 · 0 评论 -
C++强制类型转换与应用场景
例如如下情况:2731.移动机器人 https://leetcode.cn/problems/movement-of-robots/在C++中,可以使用。原创 2023-07-06 14:51:57 · 151 阅读 · 0 评论 -
CPP取余/取模运算用途整理
"/10"操作会将数字的最后一位(个位数)去掉。// 输出 123如果要获取一个数的个位数,可以使用"%10"操作,"%10"操作会得到数字的个位数。// 输出 4。原创 2023-07-05 23:27:01 · 1162 阅读 · 0 评论 -
CPP中的lambda表达式
leetcode56.合并区间lambda表达式用于自定义sort比较函数public ://用lambda表达式来自定义sort sort(intervals . begin() , intervals . end() , [ ](const vector < int > & a , const vector < int > & b) {}));//把第一个元素加进去 result . push_back(intervals [ 0 ]);//开始遍历 for(int i = 1;原创 2023-07-05 22:56:20 · 433 阅读 · 0 评论 -
list和vector容器的插入与访问操作区别
那么底层其实就要申请一个大小为6的普通数组,并且把原元素拷贝过去,释放原数组内存,注意图中底层数组的内存起始地址已经变了。原vector中的size和capicity相同都是3,初始化为1 2 3,此时要push_back一个元素4。而在本案例中,我们使用vector来做insert的操作,此时大家可会发现,虽然表面上复杂度是O(n2),但是,其直观上来看数组的insert操作是O(n)的,整体代码的时间复杂度是O(n^2)。,就是可以不用关心初始时候的大小,可以随意往里放数据,那么。原创 2023-07-05 16:22:30 · 1008 阅读 · 0 评论 -
list容器语法
否则编译器不知道如何进行排序高级排序只是在排序规则上再进行一次。原创 2023-07-05 15:52:47 · 876 阅读 · 0 评论 -
deque容器语法
deque容器和vector容器的构造方式几乎一致,灵活使用即可。原创 2023-07-05 15:35:57 · 98 阅读 · 0 评论 -
STL(二):set在贪心中的使用
关联式容器相关:关联式容器 - OI Wiki (oi-wiki.org)在贪心算法中经常会需要出现类似 找出并删除 最小的 大于等于某个值的元素。这种操作能轻松地通过 set 来完成。// 现存可用的元素set<int> available;// 需要大于等于的值int x;// 查找最小的大于等于x的元素set<int>::iterator it = available.lower_bound(x);if (it == available.end()) {原创 2023-07-03 19:13:31 · 210 阅读 · 0 评论 -
STL补充:STL中遵循的左闭右开原则/STL随机访问
所以,原创 2023-07-03 19:08:08 · 597 阅读 · 0 评论 -
CPP中{}和[]的用法与区分
来创建一个向量,在 C++ 中这是错误的,应该使用。在不同的上下文中有着不同的含义和用法。就是捕获列表,表示捕获作用域内的变量。就成了一个包含一维向量的二维向量。,而不是[3,7]和[5,5]。,它并不直接对应到C++的语法。示例:一维向量加入二维数组。对于 lambda 函数,组成的向量添加到结果向量。实际上这是将一个一维向量。在这种类型的对象中,原创 2023-07-03 15:36:06 · 511 阅读 · 0 评论 -
c++中的char类型和字符串的运算
在C++中,char类型实际上是一种,只不过它通常用于表示。char类型的变量在内存中存储的是字符对应的ASCII值,例如,以此类推。当我们char。例如,如果有一个char变量k,其值为’1’,当执行k++时,k的ASCII值会增加1,变成50,对应的字符就是’2’。原创 2023-06-28 21:01:37 · 1700 阅读 · 0 评论 -
字符串数组`vector<string>`的创建
是一个动态数组,它可以根据需要自动调整自身的大小。注意,此处的 vector<string>是一个字符序列,可以理解为文本字符串。leetcode51.N皇后。同时,在图形和游戏编程中,我们。个字符串,每个字符串包含。创建包含5个空字符串的。原创 2023-06-28 15:45:36 · 1426 阅读 · 0 评论 -
CPP使用const的情况
那么常量引用和非常量引用可能会导致不同的函数(例如拷贝构造函数和拷贝赋值运算符)被调用,因此在这些情况下,选择使用常量引用还是非常量引用是非常重要的。原创 2023-06-27 02:15:15 · 239 阅读 · 0 评论 -
字符串转化为int类型的用法汇总
在处理字符串相关的问题时,字符转换为整数后通常被用作数组或哈希表的下标,可以方便地记录字符的频率或查询字符的映射关系。int。原创 2023-06-23 17:44:46 · 1225 阅读 · 0 评论 -
c++的栈内存和堆内存
在C++中,内存主要分为两种类型:栈内存和堆内存。当我们在函数内部声明一个变量时,它通常是在栈上创建的。栈上的内存是由编译器自动管理的,也就是说,当变量的生命周期结束(例如,当函数返回时)时,编译器会自动释放它占用的内存。然而,栈的大小是有限的,且在编译时就已经确定,所以。,并通过我们的代码在运行时创建的。因为这个内存是在堆上的,所以当我们不再需要这个节点时,我们需要手动使用 delete 来释放它,以防止内存泄露。由于这个内存是在堆上分配的,所以它不会在函数返回时自动被释放,堆是另一种类型的内存,它是。原创 2023-06-15 02:35:47 · 519 阅读 · 0 评论 -
static在 C++ 中的四种用法
但是注意,静态成员函数无法访问类的非静态成员变量,因为这些变量是与类的实例关联的,而静态成员函数不属于任何具体的类的实例。在这种情况下,我们不能直接传递一个非静态成员函数,因为非静态成员函数需要一个隐含的 this 指针,而我们在创建线程的时候不能提供这个 this 指针。上述代码不能正确运行,因为bar是一个非静态成员函数,而在startThread函数中,我们无法给出这样一个上下文。因为非静态成员函数需要一个对象的上下文(也就是this指针),而在这个例子中,我们并没有提供这样的上下文。原创 2023-06-13 20:16:54 · 1955 阅读 · 2 评论 -
c++静态变量成员函数和全局函数的区别
静态局部变量:在函数内部声明的静态变量。它在程序执行到该对象的声明处时首次进入初始化,直到程序的生命周期结束时才会被销毁。即使函数结束,静态局部变量的值也会保留。静态全局变量:在函数外声明的静态变量(也可以是在命名空间内)。它的作用范围局限于声明它的文件内。静态成员变量:类中的静态成员变量。它们是类的所有对象共有的。静态成员变量在所有对象中有且只有一个副本。静态成员函数:类中的静态成员函数。它们也是类的所有对象共有的。静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。原创 2023-06-13 19:53:02 · 1875 阅读 · 0 评论 -
cpp比较坑的问题:int maxValue = LONG_MIN;会发生截断
和maxValue初始值定义为INT_MIN的情况是一样的。只不过此时因为int 接收 long long的截断原因,int 变量maxValue 直接= 0。因此,当我们输入[0]的时候,maxValue经过截断也=0,导致了初始值和第一个节点数值相等,直接返回false。如果maxValue定义成int,输入[0]的时候,输出发生了和输入INT_MIN一样的现象,也就是说,这里如果maxValue定义成int,原创 2023-06-12 22:18:31 · 85 阅读 · 0 评论 -
记录一个cpp的坑:cmp 排序自定义比较函数的问题
参考:http://biasee.com/2016/01/22/STL-sort-segmentation-fault/C++ std的sort,compare函数写成下面这样,可能出现segmentation fault,因为写成a>=b是错误的,不符合stl的strict weak ordering关系。使用C++的标准模板库(Standard Template Library,STL)中的std::sort函数进行排序时,如果你的比较函数(这里是cmp)的实现是return a>=b;原创 2023-06-08 19:58:15 · 307 阅读 · 1 评论 -
vector容器语法相关
判断是否为空 — empty返回元素个数 — size返回容器容量 — capacity重新指定大小 — resize尾插 — push_back尾删 — pop_back插入 — insert (位置迭代器)删除 — erase (位置迭代器)清空 — clear除了用迭代器获取vector容器中元素,[ ]和at也可以front返回容器第一个元素back返回容器最后一个元素swap可以使两个容器互换,可以达到实用的收缩内存效果。原创 2023-05-11 08:55:00 · 142 阅读 · 0 评论