啃书《C++Primer5
文章平均质量分 94
羞儿
和我一起学习吧,有问题请积极讨论。费曼学习法,论证,整合,再论证,再整合。
展开
-
C++内存管理(可能对面试有用)
如果程序需要的内存大于物理内存,或者内存中剩余的空间不足以容纳当前程序,那么操作系统会将内存中暂时用不到的一部分数据写入到磁盘,等需要的时候再读取回来,而我们的程序只管使用 4GB 的内存,不用关心硬件资源够不够。这是一个很大的值,不但物理内存不可能达到这么大,CPU的寻址能力也没有这么大,实现64位长的虚拟地址只会增加系统的复杂度和地址转换的成本,带不来任何好处,所以 Windows 和 Linux 都对虚拟地址进行了限制,仅使用虚拟地址的低48位(6个字节),总的虚拟地址空间大小为。原创 2024-04-09 10:19:07 · 1017 阅读 · 0 评论 -
【C++代码】链表
};st.pop();return ve;反转的实现就是一点小技巧,需要用到三个指针变量,类似于两个数交换的思想,层次递进。现在假设定义pre、phead、temp三个指针变量,用phead指向链表的头结点,而pre代表phead的前一个节点。//将phead指向链表头,做游标使用pre = NULL;//pre为头指针之前的节点= NULL){temp = pre;//pre接到之前的节点。原创 2023-11-25 10:27:18 · 1042 阅读 · 0 评论 -
【C++代码】最接近的三数之和,括号生成,合并两个有序链表,合并 K 个升序链表
我们首先需要 O(NlogN) 的时间对数组进行排序,随后在枚举的过程中,使用一重循环 O(N) 枚举 a,双指针 O(N) 枚举 b 和 c,故一共是 O(N2)。空间复杂度:O(n),除了答案数组之外,我们所需要的空间取决于递归栈的深度,每一层递归函数需要 O(1) 的空间,最多递归 2n 层,因此空间复杂度为 O(n)。空间复杂度:O(n),除了答案数组之外,我们所需要的空间取决于递归栈的深度,每一层递归函数需要 O(1) 的空间,最多递归 2n 层,因此空间复杂度为 O(n)。原创 2023-11-14 20:40:06 · 100 阅读 · 0 评论 -
【C++代码】罗马数字和阿拉伯数字互转,双指针完成盛最多水的容器,自动机实现字符串转换整数
通常情况下,罗马数字中小的数字在大的数字的右边。对于这种情况,我们也可以将每个字符视作一个单独的值,若一个数字右侧的数字比它大,则将该数字的符号取反。根据罗马数字的唯一表示法,为了表示一个给定的整数 num,我们寻找不超过 num 的最大符号值,将 num 减去该符号值,然后继续寻找不超过 num 的最大符号值,将该符号拼接在上一个找到的符号之后,循环直至 num 为 000。记 rev 为翻转后的数字,为完成翻转,我们可以重复「弹出」x 的末尾数字,将其「推入」rev 的末尾,直至 x 为 0。原创 2023-11-14 09:21:26 · 331 阅读 · 0 评论 -
【C++代码】模拟,动态规划,无重复字符的最长子串,寻找两个正序数组的中位数,最长回文子串
根据中位数的定义,当 m+n 是奇数时,中位数是两个有序数组中的第 (m+n)/2 个元素,当 m+n 是偶数时,中位数是两个有序数组中的第 (m+n)/2 个元素和第 (m+n)/2+1 个元素的平均值。由于两个数组的长度已知,因此中位数对应的两个数组的下标之和也是已知的。根据题意,当我们在矩阵上填写字符时,会向下填写 r 个字符,然后向右上继续填写 r−2 个字符,最后回到第一行,因此 Z 字形变换的周期 t=r+r−2=2r−2,每个周期会占用矩阵上的 1+r−2=r−1 列。空间复杂度:O(1)。原创 2023-11-12 23:21:16 · 54 阅读 · 0 评论 -
【C++代码】接雨水,最近的更大的元素,柱状图中的最大矩阵,单调栈--代码随想录
长就是通过柱子的高度来计算,宽是通过柱子之间的下标来计算,那么栈里有没有必要存一个pair类型的元素,保存柱子的高度和下标呢。因为一旦发现添加的柱子高度大于栈头元素了,此时就出现凹槽了,栈头元素就是凹槽底部的柱子,栈头第二个元素就是凹槽左边的柱子,而添加的元素就是凹槽右边的柱子。,因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。每个柱子彼此相邻,且宽度为 1。原创 2023-11-05 20:07:36 · 143 阅读 · 0 评论 -
【C++代码】编辑距离,最长递增子序列,最长连续递增序列,最长重复子数组,最长公共子序列,不相交的线,动态规划--代码随想录
当s[i - 1] 与 t[j - 1]不相等时,dp[i] [j]只有一部分组成,不用s[i - 1]来匹配(就是模拟在s中删除这个元素),即:dp[i - 1] [j]dp数组如何初始化:从递推公式dp[i] [j] = dp[i - 1] [j - 1] + dp[i - 1] [j];确定dp数组(dp table)以及下标的含义:dp[i] [j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i] [j]。原创 2023-11-03 16:35:03 · 101 阅读 · 0 评论 -
【C++代码】买卖股票最佳时机系列,动态规划--代码随想录
同样dp[i][1]取最大的,dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1] [0]);如果i为1,第1天买入股票,那么递归公式中需要计算 dp[i - 1] [1] - prices[i] ,即 dp[0] [1] - prices[1],那么大家感受一下 dp[0] [1] (即第0天的状态二)应该初始成多少,只能初始为0。所以 dp[i] [1] = max(dp[i-1] [0] - prices[i], dp[i - 1] [1]);原创 2023-11-02 10:12:36 · 171 阅读 · 0 评论 -
【C++代码】背包问题,完全背包,多重背包,打家劫舍,动态规划--代码随想录
确定递推公式:dp[j] 可以由dp[j - i * i]推出, dp[j - i * i] + 1 便可以凑成dp[j]。此时我们要选择最小的dp[j],所以递推公式:dp[j] = min(dp[j - i * i] + 1, dp[j]);dp数组如何初始化:既然递归公式是 dp[i] += dp[i - j],那么dp[0] 一定为1,dp[0]是递归中一切数值的基础所在,如果dp[0]是0的话,其他数值都是0了。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。原创 2023-11-01 11:08:54 · 180 阅读 · 0 评论 -
【C++代码】分割等和子集,目标和,一和零,零钱兑换,动态规划--代码随想录
其实也可以使用二维dp数组来求解本题,dp[i] [j]:使用 下标为[0, i]的nums[i]能够凑满j(包括j)这么大容量的包,有dp[i] [j]种方法。dp数组如何初始化:因为重量都不会是负数,所以dp[j]都初始化为0就可以了,这样在递归公式dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);确定递推公式:dp[i][j] = max(dp[i - 1] [j], dp[i - 1] [j - weight[i]] + value[i]);原创 2023-10-31 21:03:17 · 133 阅读 · 0 评论 -
【C++代码】爬楼梯,不同路径,整数拆分,不同搜索树,动态规划--代码随想录
动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,,贪心没有状态推导,而是从局部直接选最优的,例如:有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。,求解将哪些物品装入背包里物品价值总和最大。原创 2023-10-29 22:44:14 · 233 阅读 · 0 评论 -
【C++代码】合并区间,最少用箭数,划分字符串,监控二叉树,贪心算法--代码随想录
在讲解[贪心算法:根据身高重建队列 中,我们提到了使用vector(C++中的动态数组)来进行insert操作是费时的。其直观上来看数组的insert操作是O(n)的,整体代码的时间复杂度是O(n^2)。对于普通数组,一旦定义了大小就不能改变,例如int a[10];,这个数组a至多只能放10个元素,改不了的。对于动态数组,就是可以不用关心初始时候的大小,可以随意往里放数据,那么耗时的原因就在于动态数组的底层实现。。原创 2023-10-28 11:13:52 · 77 阅读 · 0 评论 -
【C++代码】分糖,分饼干,摇摆序列,贪心算法--代码随想录
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 ,都有一个胃口值 ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 ,都有一个尺寸 。如果 ,我们可以将这个饼干 分配给孩子 ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。为了满足更多的小孩,就不要造成饼干尺寸的浪费。大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。可以尝试使用贪心策略,先将饼干数组和小孩数组排序。然后从后向原创 2023-10-26 23:13:29 · 134 阅读 · 0 评论 -
【C++代码】安排行程,N皇后,解数独--代码随想录
一个机场映射多个机场,机场之间要靠字母序排列,一个机场映射多个机场,可以使用std::unordered_map,如果让多个机场之间再有顺序的话,就是用std::map 或者std::multimap 或者 std::multiset。从图中,可以看出,二维矩阵中矩阵的高就是这棵树的高度,矩阵的宽就是树形结构中每一个节点的宽度。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。确定完约束条件,来看看究竟要怎么去搜索皇后们的位置,其实搜索皇后的位置,可以抽象为一棵树。的棋子放置方案,该方案中。原创 2023-10-25 20:38:46 · 123 阅读 · 0 评论 -
【C++代码】回溯,子集,组合,全排列,去重--代码随想录
可以看出元素1在[1,2]中已经使用过了,但是在[2,1]中还要在使用一次1,所以处理排列问题就不用使用start了。时间复杂度: O(n!可以使用双指针法,一个指针从前向后,一个指针从后向前,如果前后指针所指向的元素是相等的,就是回文字符串了。因为排列问题,每次都要从头开始搜索,例如元素1在[1,2]中已经使用过了,但是在[2,1]中还要再使用一次1。其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。原创 2023-10-25 10:30:40 · 71 阅读 · 0 评论 -
【C++代码】组合123,回溯,剪枝--代码随想录
来举一个例子,n = 4,k = 4的话,那么第一层for循环的时候,从元素2开始的遍历都没有意义了。图中可以看出遍历的深度,就是输入"23"的长度,而叶子节点就是我们要收集的结果,输出[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]。在这里要定义两个全局变量,一个用来存放符合条件单一结果,一个用来存放符合条件结果的集合。,注意这只是复杂度的上界,因为剪枝的存在,真实的时间复杂度远小于此;如果至少一个数字的被选数量不同,则两种组合是不同的。原创 2023-10-24 09:59:21 · 97 阅读 · 0 评论 -
【C++代码】二叉搜索树的最近公共祖先,二叉搜索树中的插入操作,删除二叉搜索树中的节点--代码随想录
从根节点搜索,第一次遇到 cur节点是数值在[q, p]区间中,此时可以说明 q 和 p 一定分别存在于 节点 的左子树,和右子树中。第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点。第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点。确定终止条件:终止条件就是。,并把插入的节点返回。原创 2023-10-21 22:10:17 · 201 阅读 · 0 评论 -
【C++代码】最大二叉树,合并二叉树,二叉搜索树中的搜索,验证二叉搜索树--代码随想录
一般情况来说:如果让空节点(空指针)进入递归,就不加if,如果不让空节点进入递归,就加if限制一下, 终止条件也会相应的调整。原创 2023-10-14 20:58:22 · 142 阅读 · 0 评论 -
【C++代码】找树左下角的值,路径总和,从中序与后序遍历序列构造二叉树,从前序与中序遍历序列构造二叉树--代码随想录
使用 height 记录遍历到的节点的高度,curVal 记录高度在 curHeight 的最左节点的值。在深度优先搜索时,我们先搜索当前节点的左子节点,再搜索当前节点的右子节点,然后判断当前节点的高度 height 是否大于 curHeight,如果是,那么将 curVal 设置为当前结点的值,curHeight 设置为 height。因为我们先遍历左子树,然后再遍历右子树,所以对同一高度的所有节点,最左节点肯定是最先被遍历到的。时间复杂度:O(n),其中 nnn 是二叉树的节点数目。需要遍历 n原创 2023-09-23 22:41:04 · 99 阅读 · 0 评论 -
【C++代码】平衡二叉树,二叉树的所有路径,左叶子之和--代码随想录
注意:二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数。二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数。关于根节点的深度究竟是1 还是 0,不同的地方有不一样的标准,leetcode的题目中都是以节点为一度,即根节点深度是1。但维基百科上定义用边为一度,即根节点的深度是0。因为。原创 2023-09-22 10:51:05 · 66 阅读 · 0 评论 -
【C++代码】二叉树的最大深度,二叉树的最小深度,完全二叉树的节点个数--代码随想录
对于任意二叉树,都可以通过广度优先搜索或深度优先搜索计算节点个数,时间复杂度和空间复杂度都是 O(n),其中 n 是二叉树的节点个数。这道题规定了给出的是完全二叉树,因此。原创 2023-09-19 22:02:06 · 153 阅读 · 0 评论 -
【C++代码】滑动窗口最大值,前 K 个高频元素--代码随想录
寻找前k个最大元素流程如图所示:(图中的频率只有三个,所以正好构成一个大小为3的小顶堆,如果频率更多一些,则用这个小顶堆进行扫描)priority_queue 容器适配器定义了一个元素有序排列的队列。默认队列头部的元素优先级最高。因为它是一个队列,所以只能访问第一个元素,这也意味着优先级最高的元素总是第一个被处理。但是如何定义“优先级”完全取决于我们自己。如果一个优先级队列记录的是医院里等待接受急救的病人,那么病人病情的严重性就是优先级。如果队列元素是银行的借贷业务,那么借记可能会优先于信贷。原创 2023-09-05 22:42:30 · 88 阅读 · 0 评论 -
【C++代码】有效的括号,删除字符串中的所有相邻重复项,逆波兰表达式求值,栈的压入、弹出序列--代码随想录
所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。对于其他的语言,如果字符串类没有提供相应的接口,则需要在遍历完成字符串后,使用栈中的字符显式地构造出需要被返回的字符串。由于栈结构的特殊性,非常适合做对称匹配类的题目。题意其实就像我们在写代码的过程中,要求括号的顺序是一样的,有左括号,相应的位置必须要有右括号。从栈中弹出剩余元素,此时是字符串ac,因为从栈里弹出的元素是倒序的,所以再对字符串进行反转一下,就得到了最终的结果。原创 2023-09-04 21:20:34 · 143 阅读 · 0 评论 -
【C++代码】用栈实现队列,用队列实现栈--代码随想录
可以使用两个队列实现栈的操作,其中 queue1 用于存储栈内的元素,queue2 作为入栈操作的辅助队列。入栈操作时,首先将元素入队到 queue2 ,然后将 queue1 的全部元素依次出队并入队到 queue2 ,此时 queue2 的前端的元素即为新入栈的元素,再将 queue1 和 queue2 互换,则 queue1 的元素即为栈内的元素,queue1 的前端和后端分别对应栈顶和栈底。原创 2023-09-03 16:01:07 · 273 阅读 · 0 评论 -
【C++代码】找出字符串中第一个匹配项的下标,重复的子字符串--代码随想录
本题是KMP 经典题目。KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配。KMP主要应用在字符串匹配上。主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。所以如何记录已经匹配的文本内容,是KMP的重点,也是next数组肩负的重任。next数组就是一个前缀表(prefix table)。前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。为了清楚的原创 2023-09-02 15:37:17 · 397 阅读 · 0 评论 -
【STL】STL六大部件及容器中常见的函数成员-(补一道没做完的题)
在确定第一个数之后,如果 nums[i]+nums[n−3]+nums[n−2]+nums[n−1]原创 2023-08-31 09:33:55 · 111 阅读 · 0 评论 -
【C++代码】反转字符串,反转字符串II,替换空格,翻转字符串里的单词--代码随想录
将整个字符串反转将每个单词反转。原创 2023-08-30 22:49:21 · 597 阅读 · 0 评论 -
【C++代码】四数相加II,赎金信,三数之和--代码随想录
也就是说,我们枚举的三元组 (a,b,c) 满足 a≤b≤c,保证了只有 (a,b,c) 这个顺序会被枚举到,而 (b,a,c)、(c,b,a) 等等这些不会,这样就减少了重复。同时,对于每一重循环而言,相邻两次枚举的元素不能相同,否则也会造成重复。这是因为在枚举的过程每一步中,「左指针」会向右移动一个位置(也就是题目中的 b),而「右指针」会向左移动若干个位置,这个与数组的元素有关,但我们知道它一共会移动的位置数为 O(N),均摊下来,每次也向左移动一个位置,因此时间复杂度为 O(N)。原创 2023-08-29 23:03:40 · 480 阅读 · 0 评论 -
【C++代码】有效的字母异位词, 两个数组的交集,快乐数,两数之和--代码随想录
哈希表也叫散列表,哈希表是一种数据结构,它提供了快速的插入操作和查找操作,无论哈希表总中有多少条数据,插入和查找的时间复杂度都是为O(1),因为哈希表的查找速度非常快,所以在很多程序中都有使用哈希表,例如拼音检查器。哈希表也有自己的缺点,哈希表是基于数组的,我们知道数组创建后扩容成本比较高,所以当哈希表被填满时,性能下降的比较严重。。哈希表中关键码就是数组的索引下标,然后。。例如要查询一个名字是否在这所学校里。要枚举的话时间复杂度是O(n),但如果使用哈希表的话, 只需要O(1)就可以做到。我们。原创 2023-08-28 22:32:44 · 590 阅读 · 0 评论 -
【C++代码】两两交换链表中的节点,删除链表的倒数第 N 个结点,链表相交,环形链表 II--代码随想录
如果 m≠n,则由于两个链表没有公共节点,两个指针也不会同时到达两个链表的尾节点,因此两个指针都会遍历完两个链表,在指针 pA 移动了 m+n 次、指针 pB 移动了 n+m 次之后,两个指针会同时变成空值 null,此时返回 null。假设链表 headA 的不相交部分有 a 个节点,链表 headB 的不相交部分有 b 个节点,两个链表相交的部分有 c 个节点,则有 a+c=m,b+c=n。否则,获得 left 后面的两个节点 node1 和 node2,通过更新节点的指针关系实现两两交换节点。原创 2023-08-26 23:37:03 · 686 阅读 · 0 评论 -
【C++代码】移除链表元素,设计链表,反转链表--代码随想录
链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向 null(空指针的意思)。链表的入口节点称为链表的头结点也就是head。单链表中的指针域只能指向节点的下一个节点。双链表的每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。双链表 既可以向前查询也可以向后查询。循环链表,顾名思义,就是链表首尾相连。数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。链表是通过指针域的指针链接在内存中各个节点。原创 2023-08-25 23:11:40 · 730 阅读 · 0 评论 -
【C++代码】有序数组的平方,长度最小的子数组,螺旋矩阵 II--代码随想录
并且,由于该类型智能指针在实现上采用的是引用计数机制,即便有一个 shared_ptr 指针放弃了堆内存的“使用权”(引用计数减 1),也不会影响其他指向同一堆内存的 shared_ptr 指针(只有引用计数为 0 时,堆内存才会被自动释放)。同样,当 weak_ptr 指针被释放时,之前所指堆内存的引用计数也不会因此而减 1。这也就意味着,每个 unique_ptr 指针指向的堆内存空间的引用计数,都只能为 1,一旦该 unique_ptr 指针放弃对所指堆内存空间的所有权,则该空间会被立即释放回收。原创 2023-08-24 22:38:20 · 1243 阅读 · 1 评论 -
【C++代码】二分查找,移除元素
和 target 的大小,如果相等则 mid 即为要寻找的下标,如果不相等则根据 nums[mid] 和 target 的大小关系将查找范围缩小一半。由于题目要求删除数组中等于 val 的元素,因此输出数组的长度一定小于等于输入数组的长度,我们可以把输出的数组直接写在输入数组上。如果右指针指向的元素不等于 val,它一定是输出数组的一个元素,我们就将右指针指向的元素复制到左指针位置,然后将左右指针同时右移;不同编程语言的内存管理是不一样的,以C++为例,在C++中二维数组是连续分布的。原创 2023-08-23 21:15:04 · 1040 阅读 · 0 评论 -
字符串,向量迭代器
end成员则负责返回指向容器(或string对象)“尾元素的下一位置(one past the end)”的迭代器,也就是说,该迭代器指示的是容器的一个本不存在的“尾后(off the end)”元素。和上文的那个程序一样,上面的循环也是遍历s的字符直到遇到空白字符为止,只不过之前的程序用的是下标运算符,现在这个程序用的是迭代器。类似的,用两个整数来初始化vector时,这两个整数可能一个是vector对象的容量,另一个是元素的初值,也可能它们是容量为2的vector对象中两个元素的初值。原创 2023-08-17 16:53:17 · 126 阅读 · 0 评论 -
c++基础概念,const与指针、引用的关系,auto,decltype关键字能干啥总得了解吧。总得按照需求自定义创建实体类,自己编写头文件吧
如果想让结果类型是r所指的类型,可以把r作为表达式的一部分,如r+0,显然这个表达式的结果将是一个具体值而非一个引用。交易信息记录的是书售出的单价,而数据结构存储的是一次交易的销售收入,因此需要将单价读入到double变量price,然后再计算销售收入revenue。和sales_item类不同的是,新程序还包含了string头文件,因为我们的代码中将用到string类型的成员变量bookNo。这么做无异于把两种不同实体的定义混在了一条语句里,一会儿定义类,一会儿又定义变量,显然这是一种不被建议的行为。原创 2023-05-27 10:27:25 · 914 阅读 · 0 评论 -
【啃书C++Primer5】-c++有些理论基础需要了解,墙裂建议看看原书,有太多细节需要注意了
如果后缀中有u,则该字面值属于无符号类型,也就是说,以u为后缀的十进制数、八进制数或十六进制数都将从unsigned int、 unsigned long 和 unsigned long long中选择能匹配的空间最小的一个作为其数据类型。大多数计算机将内存中的每个字节与一个数字(被称为“地址(address)”)关联起来,在一个字节为8比特、字为32比特的机器上,我们可能看到一个字的内存区域如下所示:其中,左侧是字节的地址,右侧是字节中8比特的具体内容。整型字面值具体的数据类型由它的值和符号决定。原创 2023-05-15 20:31:46 · 468 阅读 · 0 评论 -
【啃书C++Primer5】-编写一个简单C++程序
因此,当我们读取cin,数据将从程序正在运行的窗口读入,当我们向cout、cerr和clog写入数据时,将会写到同一个窗口。原创 2023-05-13 20:52:52 · 734 阅读 · 1 评论