C++笔记
幻欢子
湘地生,癸酉诞,好诗书,喜乐理。
展开
-
C++11笔记(1)
C++11学习笔记(1)·iostream库定义了4个IO对象:cin、cout、cerr、clog。 ·前缀std::指出其后的名字是定义在名为std的命名空间中的,命名空间可以帮助我们避免不经意的名字定义冲突,以及使用库中相同名字导致的冲突。 ·每个for语句都包含两部分,循环头(三部分:初始化语句、循环条件、表达式)和循环体。 ·包含来自标准库的头文件时,使用尖括号(< >)包围头文件名原创 2016-08-27 14:04:48 · 396 阅读 · 0 评论 -
关于“指向常量字符串的字符指针不可更改字符串内容”的理解及引申
一、代码说明:#include <iostream>using namespace std;int main() { string str = "hello1"; // 字符串变量 // 字符数组,先在常量区存储"hello2",然后在栈区申请内存空间, // 将"hello2"复制过去,str指向栈区的"hello2" char arr[] = "hello2...原创 2018-12-19 16:34:08 · 728 阅读 · 0 评论 -
C++的另一面
本博文会持续更新,记录C++少为人知的特点可作为笔记温习之用,先罗列出关键词和简要介绍,再给出诸多参考链接便于进一步探求。 1、RAII机制 Resource Acquisition Is Initialization:资源获取即初始化,构造函数里申请资源,析构函数里释放资源。应用如智能指针、lambda表达式。核心思想是将资源或者状态与对象的生命周期绑定,通过C++的语言...原创 2019-01-04 17:42:30 · 158 阅读 · 0 评论 -
C++函数对象与lambda表达式
函数对象与lambda表达式有类似之处,lambda表达式实质上属于一种特殊的函数对象。具体特殊在哪里,后文会谈到,可以先知晓这点。接下来先分别了解下函数表达式与lambda表达式吧。一、函数对象 从实现上来说,函数对象是指实现了operator()的类的对象。可以用于STL算法。在结构或类中实现函数对象时,将比简单函数更有妙用,因为它还可以存储状态有关的信息。 常用于ST...原创 2019-01-15 23:40:05 · 639 阅读 · 0 评论 -
C语言中的const冒牌货
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ const int a = 10; // C语言中能够通过指针间接修改,const已经发挥不到它的作用 // C++中这样会报错,需要加const int* p = &a; 不能通过p间接修改 in...原创 2019-08-22 23:26:58 · 205 阅读 · 0 评论 -
利用栈和队列判断出栈序列合法性
#include <iostream>#include <stack>#include <queue>#include <string.h>using namespace std;/*方法一:栈s是顺序入栈(1, 2, 3, ...)。队列order是待校验序列。*/bool is_valid_order(queue<...原创 2019-08-26 14:56:50 · 736 阅读 · 0 评论 -
C++中四种cast的用法及区别
一、直接代码运行看结果test01到test04(),挨个运行即可看出差别,有的注释打开后观察报错信息。/*======================================================**程序说明: 4种cast的使用*运行平台: Linux/Windows*创建日期: 20190827*作 者: LiuHuan**==========...原创 2019-08-27 17:28:11 · 1788 阅读 · 1 评论 -
vector实现归并排序并分析耗时
目录一、概述二、代码分析三、耗时分析四、复杂度及稳定性分析一、概述归并排序图示分析(百度百科找的一张图)思想:归并排序(Merging Sort)利用归并思想实现的排序算法,原理是:假定初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两合并,得到 n/2个长度为2或1的有序子序列;然后再两两合并,……,如此重复,直至...原创 2019-08-31 00:54:25 · 957 阅读 · 0 评论 -
C++实现桶排序
一、概述桶排序的算法思想:是将阵列分到有限数量的桶子里。每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的阵列内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是比较排序,他不受到 O(n log n) 下限的影响。简单来说,就是把数据分组,放在一个个的桶中,然后对每个桶里面的在进行排序。(桶本...原创 2019-08-31 15:06:19 · 2766 阅读 · 2 评论 -
C++基数排序
目录一、概述二、代码三、程序运行情况一、概述1、基本思想(沿袭自桶排序):从低位开始,对所有数字进行排序。例如第1轮排序后,数字的个位数要有序;第2轮排序后,数字的十位数要有序,如果十位数相同的数,个位数要按照之前的相对顺序摆放;依次类推直至最高位排序完成。过程如下图:二、代码C++利用vector实现/*======================...原创 2019-08-31 17:20:04 · 1394 阅读 · 3 评论 -
求子数组最大连续和(考虑全为负数)
题目形式:给定一个数组,求其最大连续子数组和。(扩展题型还要求指出起始位置)例如:arr = [1, 5, -10, 2, 5, -3, 2, 6, -3, 1]。输出为:12。对应的连续子数组为[2, 5, -3, 2, 6]。代码:注意点:1、考虑全为负数情况。2、有很多博文代码跑出来结果健壮性不够,此处有点到问题所在和临时解决办法。3、建议先从只求最大连续和版本看,此...原创 2019-09-02 01:44:39 · 358 阅读 · 0 评论 -
C++函数后面加const
非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);唯一的例外是对于mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调...原创 2018-11-07 11:20:05 · 495 阅读 · 0 评论 -
C++ resize和reserve详解
先上代码: #include <iostream>#include <vector>using namespace std;void display(const vector<int>& vec, char* vecName){ cout <<" "<< vecName << "原创 2018-11-06 19:07:53 · 1922 阅读 · 0 评论 -
C++11笔记(4)——const 限定符
const关键字的用法,const与引用、指针结合的辨析,顶层const以及底层const辨析原创 2016-08-27 19:18:03 · 489 阅读 · 0 评论 -
C++11笔记(3)——引用&指针辨析
指针和引用辨析,异同区分原创 2016-08-27 18:29:07 · 1229 阅读 · 0 评论 -
C++11学习笔记(2)
变量和基本类型1C++算数类型声明&定义辨析语句嵌套赋值&初始化辨析区分注意if语句注意点原创 2016-08-27 15:39:10 · 367 阅读 · 0 评论 -
避免 C/C++ 程序一闪而过的方法
解决这个问题,可以在代码的最后加上system(“pause”)、getchar()、cin.get()。 比较常用的做法是使用system(“pause”),不推荐使用”system(“pause”),因为: 1、不可移植。只适合Dos或Windows,不适合Linux等。 2、耗费系统资源。调用系统命令system()去做”暂停程序”的事情有点大材小用。 3、必须添加头文件:stdlib原创 2016-09-03 22:17:06 · 1001 阅读 · 0 评论 -
C++控制输出的字体颜色
C++控制台程序运行时输出框默认的文字颜色是白色,所以我常称其输出框为黑白框。但是这个文字样式不是固定不变的,是可以改变颜色的字体的。方法有两种: 一、设置输出框的框体属性。在运行时弹出的输出框标题栏上点击右键设置它的属性,可以调节输出框的大小、背景色、文字颜色等属性。但是这种设置只能在自己的机子上运行显示。在其他人的机子上是没有用的。这里不做重点介绍。 二、用代码修改。这里介绍C++中用代码修原创 2016-10-11 22:25:57 · 76518 阅读 · 16 评论 -
size_t与size_type辨析
为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int及unsigned。size_t与size_type区别与联系如下:1. size_t是全局定义的类型;size_type是STL类中定义的类型属性,用以保存任意string和vector类对象的长度2. string::size_type 制类型一般就是unsigned i原创 2016-09-28 22:09:48 · 375 阅读 · 0 评论 -
关于使用#pragma once与#ifndef ___FILE_NAME__H避免文件被多次包含的区别
在C++中,有如下方法可以避免同一个文件被包含多次: 1、#ifndef方式。 #ifndef __FILE_NAME_H_#define __FILE_NAME_H_//......some sentences#endif 2、#pragma once方式。 #pragma once//......some sentences 二者区别所...原创 2018-03-12 11:27:27 · 623 阅读 · 0 评论 -
妙用移位运算符
一、位运算应用口诀 清零取反要用与,某位置一可用或。 若要取反和交换,轻轻松松用异或。 二、移位运算都是双目运算符,两个运算分量都是整型,结果也是整型。 "<<" 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。 ">>"右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的...原创 2018-10-20 11:28:52 · 1276 阅读 · 0 评论 -
C++常用string函数
一、字符串声明// 生成一个空字符串string s;// 拷贝构造函数string s(str);// 截取str内从stridx开始的部分赋给sstring s(str, stridx);// 将str内从stridx开始,长度最长为strlen的子串赋给sstring s(str, stridx, strlen);// 将c字符串作为s初值string s(c...原创 2018-11-06 16:03:08 · 247 阅读 · 0 评论 -
计数排序
目录一、基本思路二、代码实现一、基本思路 给定一个数组,先统计各个元素出现的次数,用元素的值做下标,得到一个新的数组。然后扫描这个数组,对于数组的每个下标,如果它对应值不为0,说明元来数组中就有几个这样的值。由于下标的天然递增,依次将这些值展开就得到排序后的数组。 但是计数排序有它的局限性,首先如果想用数组统计各个元素出现的次数,它的值必须是正整数。如果你想用...原创 2019-05-17 22:04:58 · 970 阅读 · 0 评论