C++基础
王小闹儿
这个作者很懒,什么都没留下…
展开
-
计算机图形学(三)朴素的软光栅(直线扫描转换算法、bresenham算法)
软光栅不借助硬件资源实现光栅化的方式,叫做软光栅。扫描转换直线扫描转换算法数值微分算法——Digital Differential Analyzer一种直接从直线的微分方程生成直线的方法。通过给定直线的两端点坐标P0 (x0 ,y0 )和P1 (x1 ,y1 ),我们可以得到直线的微分方程:令ε=1/max(|△x|,|△y|)情况一 斜率绝对值小于1:ε=1/|△x|情况二 斜率绝对值大于1:ε=1/|△y|令ε=1/m...原创 2020-05-24 10:58:43 · 1375 阅读 · 0 评论 -
strlen 与sizeof()的区别
这个总结的更好:https://blog.csdn.net/myself00/article/details/40514939strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。 charaa[10];cout<<strlen(a...原创 2018-10-31 13:50:41 · 206 阅读 · 0 评论 -
c++ 浅拷贝和深拷贝
class with point member(带指针的类),一定有copy ctor(拷贝构造)和copy op=(拷贝赋值)浅拷贝(讲这个概念是为了跟你解释为什么一定要写自己的版本):如果你不写拷贝构造和拷贝赋值,系统会为你默认生成这两个函数。而用系统里面默认生成的函数,则会发生下图中a和b的指针都指向“HELLO”,而“WORLD”没有指针指着它(这种情况叫内存泄漏)。两个指...原创 2018-11-03 07:40:41 · 199 阅读 · 0 评论 -
利用动态规划算法解01背包问题->二维数组传参->cpp内存管理->堆和栈的区别->常见的内存错误及其对策->指针和数组的区别->32位系统是4G
1、利用动态规划算法解01背包问题https://www.cnblogs.com/Christal-R/p/Dynamic_programming.html两层for循环,依次考察当前石块是否能放入背包。如果能,则考察放入该石块是否会得到当前背包尺寸的最优解。// 01 knapsack problem dynamic programming algorithm#include ...原创 2018-10-31 23:26:46 · 191 阅读 · 0 评论 -
c++ 逗号运算符
逗号运算符含有两个运算对象,按照从左向右的顺序依次求值。对于逗号运算符,首先对左侧表达式求值,然后将求值结果丢弃。逗号运算符真正的结果是右侧表达式的值。逗号运算符经常被用在for循环中:#include <iostream>#include<vector>using namespace std;int main(){ vector<int&g...原创 2018-11-04 16:50:26 · 585 阅读 · 0 评论 -
C++面向对象高级编程(上) 第三周 侯捷 类与类之间的关系
Composition(复合)——has a类中有类 Adapter(一种设计模式名)例如:queue里面包含了deque,他通过调用deque的函数来实现增加的功能。所有的功能都在的deque中完成了,queue想拥有deque的功能,就这么做。queue里面,只实现了调用个deque的功能,并没有实现deque的全部功能。并不是所有的复合都长成这样,我们这里是用ada...原创 2018-11-24 20:00:32 · 292 阅读 · 0 评论 -
命名空间专有函数
转自: https://blog.csdn.net/zhizhengguan/article/details/80940881#include <iostream>using namespace std;namespace data{ int a; int b; int numa(int a, int b); //函数声明 int add(int a, int...转载 2018-11-11 11:02:55 · 266 阅读 · 0 评论 -
int 与 unsigned int
cpp primer P31带符号类型和不带符号类型 1、除去布尔型和扩展字符外,其他整型可以划分为带符号的(signed)和无符号的(unsigned)两种。signed类型可以表示正数、负数或0,无符号类型则仅能表示大于等于0的值。(unsigned int 可以所写成 unsigned)2、当我们赋值给无符号类型一个超出他表示范围的值时,结果是初始值对无符号类型表示数值...原创 2018-11-18 17:24:42 · 5201 阅读 · 0 评论 -
记录各个七七八八的输入 持续更新中
校招在线笔试做编程题的时候,输入的要求常常是不同的,记录每一次的输入,等以后在线笔试的时候就不慌了,噗哈哈1、每次输入一个数字,当输入的不是数字的时候,循环结束(注:当输入 回车、空格、tab键的时候,程序不会退出)int main() { //数据输入接口 int input = 0; while (1) { //如果input不是数字,则跳出循环 ci...原创 2018-11-13 11:39:55 · 185 阅读 · 0 评论 -
c++ 数据字节
#include <iostream>using namespace std;void main(){ cout << sizeof(char) << endl; cout << sizeof(unsigned char) << endl; cout << sizeof(signed char) <<原创 2018-11-18 23:31:54 · 196 阅读 · 0 评论 -
查看运行结果
看下列代码的运行结果#include "pch.h"#include<iostream>using namespace std;class A{public: A() { a = 1; b = 2; }private: int a; int b;};class B{public: B() { c = 3; } void prin...原创 2018-11-14 23:47:21 · 266 阅读 · 0 评论 -
C++练级标准
路漫漫其修远兮https://blog.csdn.net/zjf280441589/article/details/37913331转载 2018-11-21 08:18:20 · 182 阅读 · 0 评论 -
捋一捋 const char * p / char* const p / char const* p
const int *p 与 int const *p 是一样的,即 *p 是常量;而 int * const p 跟上面是不一样的,即 p 是常量;我们知道引用只是一个别名,与变量共享存储空间,并且必须在定义的时候初始化,而且不能再成为别的变量的别名,这让我们想到什么呢,貌似跟 int * const p 的性质很像。其实引用的底层就是用const指针来实现的 con...原创 2018-11-16 18:37:09 · 1306 阅读 · 0 评论 -
c++ 技能树
转载 2018-11-15 08:36:42 · 3363 阅读 · 0 评论 -
vector的几种初始化及赋值方式
转自:https://blog.csdn.net/yjunyu/article/details/77728410?locationNum=10&fps=1 vector的几种初始化及赋值方式:(1)不带参数的构造函数初始化//初始化一个size为0的vectorvector<int> abc;(2)带参数的构造函数初始化//初始化size,但每个元...转载 2018-11-15 09:57:09 · 2277 阅读 · 0 评论 -
c++ 之 const整理
来源:https://www.cnblogs.com/cthon/p/9178701.html const对象不能够调用非const成员函数。 类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。 在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函数不能加 co...转载 2018-11-22 12:46:01 · 194 阅读 · 0 评论 -
用c++实现《图解设计模式》——iterator模式
书里面都是Java实现的,书上的知识点不再赘余。这里用c++把书上的设计模式实现一下,加深自己对于该设计模式的理解。 定义: 特点:通过迭代器隔离算法和容器。为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作。 缺点:虚函数调用是有性能成本的。需要根据虚函数的表指针去找你的函数地址,每次都要进行二次指针的间接运算。 ...原创 2018-11-24 01:02:10 · 293 阅读 · 0 评论 -
用c++实现《图解设计模式》——template method 模式
定义一个操作中的算法骨架,将某些实现延迟到子类(就是利用虚函数,让子类去实现某些功能,这些方法一般都设置成protected的,因为public出去没有意义,你是希望子类的实现这个方法)。Template method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 在父类中定义处理流程的框架,在子类中实现具体处理的模式称为template method。 设计模式...原创 2018-11-24 09:46:33 · 185 阅读 · 0 评论 -
整理位运算
参考链接(总结的非常好,各种奇淫技巧):https://blog.csdn.net/MoreWindows/article/details/7354571 1、优先级 “<<” 和 ">>" 的优先级低于 “+” 和 “-”。 “~” 按位求反 “^”按位异或 “|”按位求或 “&”按位求与 2、基本概念注意以...转载 2018-11-18 15:59:44 · 156 阅读 · 0 评论 -
C++面向对象高级编程(下) 第一周
Conversion Function 转换函数你现在设计一个对象 class A,它可不可以被转为另外一种类型,这就是一种转换。或者是,另外一种类型可不可以转为A。一个是转出去,一个是转进来,这两个方向,我们都要谈。现在首先谈的是转出去: 1、转化函数不可以有参数。转换类型而已,那有什么参数可言。2、转化函数没有返回类型,返回类型就是operator后面的double。他...原创 2018-11-24 20:29:43 · 161 阅读 · 0 评论 -
用c++实现《图解设计模式》——observer模式(老师说这个很常用)
他是MVC的重要组成部分 动机 模式定义 结构 对于一个实现文件切割的类,如果需要对其增加一个显示进度条的选项,使得用户可以知道文件切割的进度。如果直接在类中增加一个字段来表示进度条,这种修改方式好不好?代码如下(代码都是伪代码:mainform.cpp//一个实现文件分割器是类class MainForm : pu...原创 2018-11-29 02:20:48 · 203 阅读 · 0 评论 -
C/C++ assert()函数用法总结
转自:https://www.cnblogs.com/lvchaoshun/p/7816288.html assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。原型定义:#include <assert.h>void assert( int expression );assert的作用是先计算表达式 expr...转载 2018-12-02 08:09:05 · 218 阅读 · 0 评论 -
浅析C++的引用与const指针与各种传递方式
转自:https://www.jb51.net/article/120561.htm 首先我们知道 const int *p 与 int const *p 是一样的,即 *p 是常量;而 int * const p 跟上面是不一样的,即 p 是常量;我们知道引用只是一个别名,与变量共享存储空间,并且必须在定义的时候初始化,而且不能再成为别的变量的别名,这让我们想到什么呢,貌似跟 ...转载 2018-11-29 18:56:38 · 507 阅读 · 0 评论 -
一个关于临时对象的BUG
转自:https://blog.csdn.net/TeddyWing/article/details/13170(博主看完这篇博客之后,感觉自己不会C++了,呜呜呜) 我相信任何一个使用C++超过一定时间的程序员都不会否认这样一个事实:使用C++需要有足够的技巧。它充满了有各种各样的难以识别的陷阱,顷刻就可以让一段看起来毫无破绽的代码崩溃。例如,对C/C++的新手而言,学会如何考虑对象...转载 2018-11-29 23:47:21 · 261 阅读 · 0 评论 -
debug版本和release版本
运行代码#include<iostream>using namespace std;static void prindAddress(int a, int b, int c){ cout<<"a"<< a <<" "<<&a<<endl; cout<原创 2018-11-30 11:24:39 · 643 阅读 · 0 评论 -
union介绍,union与struct,union面试真题
转自:https://www.cnblogs.com/jeakeven/p/5113508.html union介绍共用体,也叫联合体,在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目的。union变量所占用的内存长度等于最长的成员的内存长度。 union与str...转载 2018-11-30 12:22:09 · 365 阅读 · 0 评论 -
判断电脑的大小端
一个32位四字节的整数值,例如1,实际在计算机编码表示为 0x00000001小端系统中在内存中的表示为 01 00 00 00大端系统中在内存中的表示为 00 00 00 01 判断当前计算机是大端还是小端:#include <stdint.h>#include<iostream>using namespace std;//union中的...原创 2018-11-30 13:01:38 · 281 阅读 · 2 评论 -
const的用法,特别是用在函数前面与后面的区别
转自:https://www.cnblogs.com/azbane/p/7266747.html 在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针。可以改变this所指向的值,但不能改变 this所保存的地址。(int * const p)在 const成员函数中,this的类型是一个指向 const类类型对象的 const指针。既不能改变 this所指...转载 2018-12-02 20:30:25 · 349 阅读 · 0 评论 -
vector二维数组初始化
int main() { vector<vector<int> >num = { {1,1,1,0,1,1},{1,0,1,1,1,1},{1,1,1,0,0,1},{1,0,1,0,0,1},{1,1,1,1,1,1} }; //二维数组初始化 //vector<vector<int>> vec(10,...原创 2018-12-05 18:28:37 · 3535 阅读 · 0 评论 -
字符串转整数以及函数atoi()的使用
转自:https://blog.csdn.net/lanzhihui_10086/article/details/39995869 atoi()函数atoi():int atoi(const char *str );功能:把字符串转换成整型数。str:要进行转换的字符串返回值:每个函数返回 int 值,此值由将输入字符作为数字解析而生成。 如果该输入无法转换为该类型的值,则...转载 2018-12-06 08:27:46 · 231 阅读 · 0 评论 -
argc和argv
概念argc是命令行总的参数个数 argv[]是argc个参数,其中argv[0]指向输入的程序路径及名称,以后为参数 命令行后面跟的用户输入的参数,比如: 1 #include<iostream> 2 using namespace std; 3 4 int main(int argc, char *argv[]){ 5 int i...原创 2018-12-06 13:05:21 · 509 阅读 · 1 评论 -
C++构造函数的default和delete
转自:https://blog.csdn.net/u010591680/article/details/71101737 C++11中,当类中含有不能默认初始化的成员变量时,可以禁止默认构造函数的生成,myClass()=delete;//表示删除默认构造函数myClass()=default;//表示默认存在构造函数当类中含有不能默认拷贝成员变量时,可以禁止默认构造函数的生成...转载 2018-12-06 13:06:29 · 16108 阅读 · 0 评论 -
linux中fork()函数详解
转自:https://www.cnblogs.com/dongguolei/p/8086346.html 一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同(两个进程的变量都是独立的,存在不同的地址中,不是共用的)的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做...转载 2018-12-06 15:54:51 · 236 阅读 · 0 评论 -
c++11 -14 (一)关键字(alignas、alignof、bitand和bitor、constexpr、const_cast、decltype、后置返回值类型、dynamic_cast)
C++资源https://isocpp.org/blog/2014/03/compiler-support-for-c11-and-c14http://www.stroustrup.com/推荐工具软件——DASH。这个查语言特性特别快。只可惜只能在苹果系的产品中使用。关键字/* key words of cpp * alignas (C++11 起) * ...原创 2019-04-07 22:17:04 · 993 阅读 · 0 评论 -
玩一玩字符串指针
gcc版本 8.2.0 Linux centos 7 输出字符串数组中的每个值发现——字符串末尾的\0是真实存在的 1 #include<iostream> 2 using namespace std; 3 4 int main(){ 5 char str[]="hello"; 7 for(auto i :str){ ...原创 2018-12-20 19:54:40 · 236 阅读 · 0 评论 -
C++ STL (四) 分配器(讲的很粗糙,就是大概了解一下分配器的原理,过一阵子刷一下内存管理这门课补一补吧)
分析各种IDE中allocator的实现 vc缺点:调用operator new 的获取内存,每次都是获取一点点内存,这样会有很多的额外开销 发现:这三个IDE都是通过malloc和free来分配内存,因此会带来大量的额外开销。 真正好的分配器——alloc目的:尽量减少malloc次数额外开销主要在cook...原创 2018-12-16 00:36:45 · 2443 阅读 · 2 评论 -
C++中:cout、cerr、clog的区别?
转自:https://blog.csdn.net/garfield2005/article/details/7639833 之前一直在用,但就是没在意两者到底有啥却别,今天又想到这个问题,总结下吧(以下的内容均是本人从网上查阅资料看来整理的,暂时还没有查阅官方资料,不保证准确,欢迎讨论)其实大家平常常会用的主要有三个:cout、cerr、clog,首先简单介绍下三者。这三者在C++中...转载 2018-12-27 14:40:17 · 1837 阅读 · 0 评论 -
C++宏定义详解
转自:https://www.cnblogs.com/fnlingnzb-learner/p/6903966.html 一、#define的基本用法#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一...转载 2018-12-27 16:02:20 · 5874 阅读 · 0 评论 -
写宏定义:得到一个field在结构体(struct type)中的偏移量&&字节对齐
转自:https://www.cnblogs.com/zhangjianlaoda/p/4356835.html #define OFFSETOF(type, field) ((size_t)&(((type *)0)->field))(type *)0:把0地址当成type类型的指针。((type *)0)->field:对应域的变量。&((t...转载 2018-12-27 16:45:37 · 678 阅读 · 0 评论 -
c++字节对齐
参考文章:https://www.cnblogs.com/ningvsban/p/3940153.html 如果编辑器对数据存放做了对齐,而我们不了解的话,常常会对一些问题感到迷惑。最常见的就是struct数据结构的sizeof结果,比如以下程序:#include <stdio.h>void main(){ struct A{ char ...转载 2018-12-27 18:06:29 · 200 阅读 · 0 评论