![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
wyy_blog
彩笔程序员https://github.com/wyy01
展开
-
c++多个源文件访问同一个全局变量
分为3步:1.在A.cpp 中声明:extern int a;2.在A.cpp【注意和上面A.h对应】中定义:int a;或int a=0;\3.在其他源文件中直接访问即可c.cpp中:a=10;参考:https://www.cnblogs.com/invisible2/p/6905892.html...原创 2019-11-22 13:04:41 · 3515 阅读 · 0 评论 -
bug记录——头文件中的全局变量xxx重复定义
在多个cpp文件中都要访问main.h中的全局变量,所以在main.h中添加了A a;的定义。在不同的源文件中向a的各成员变量赋值。但是在没加static关键字时,编译一直报a变量在多个源文件中重复定义的错误。起初以为是因为main.h被多个源文件包含,所以重复包含的原因。但在main.h中添加只编译一次的语句后仍出现上述错误。加上static关键字后正常编译。网上搜了一篇博客...原创 2019-11-22 12:27:40 · 989 阅读 · 1 评论 -
bug记录——expected initializer before
错误现象:但是Tserver.h都是thrift库的头文件,不应该出错。最后发现是在报错的前一个头文件声明函数或者变量时少了一个分号导致下一个头文件报错。需要注意。...原创 2019-11-22 11:59:10 · 3874 阅读 · 0 评论 -
bug记录——macro names must be identifiers
用 以数字开头的.thrift文件(615A.thrift)生成cpp文件,其中会生成615A_types.h,内容是#ifndef 615A_TYPES_H#define 615A_TYPES_H。。。#endif编译报错:参考:https://www.cnblogs.com/justinyo/archive/2013/03/13/2957350.html宏定义不...原创 2019-11-21 13:26:56 · 351 阅读 · 0 评论 -
bug记录——C语言调用C++函数接口
结论当C语言 需要调用C++函数接口(比如func.h,func.cpp)时,func.h中不能出现c++特有的class定义或头文件包含。即:关于class的定义或含有class的头文件包含必须放在源文件中(如func.cpp中),不能放在头文件(func.h,无论是extern “C” 里还是exter "C"外)中一个小bug卡了好多天。。特此记录。。。证明main.c代码如下:#...原创 2019-11-20 12:32:29 · 306 阅读 · 0 评论 -
Effective C++笔记part 7、8、9
41.了解隐式接口和编译期多态classes和Templates都支持接口和多态:对class而言接口是显式的,以函数签名为中心。多态是通过virtual函数发生于运行期。对template参数而言,接口是隐式的,奠基于有效表达式。多态则是通过template具现化和函数重载解析发生于编译期。42.了解typename的双重意义template<class T> c...原创 2019-10-17 16:15:37 · 172 阅读 · 0 评论 -
Effective C++ 笔记 part 5、6
26.尽可能延后变量定义式的出现时间尽可能延后变量的定义知道能够给它赋初值实参为止,这样做可以增加程序的清晰度并改善程序效率。否则会付出不必要的构造和析构成本。 当遇到循环时:若一个class的一个赋值成本低于一组构造和析构成本,在循环外声明变量,尤其是循环次数很多的时候。否则应在循环里声明变量。27.尽量少做转型动作const_cast通常被用来将对象的常量性移除dynamic_c...原创 2019-10-15 21:03:52 · 132 阅读 · 0 评论 -
Effective C++ 笔记 part 3、4
13.以对象管理资源资源包括:内存、文件描述符、互斥锁、图形界面中的字型和笔刷、数据库连接、网络sockets 当不再使用资源时,一定要把它归还给系统以对象管理资源(资源取得时机便是初始化时机RAII :Resource Acquisition Is Initialization):把资源放进对象内,便可依赖c++的析构函数自动调用机制确保资源被释放 获得资源后理解放进管理对象中 ...原创 2019-10-12 20:33:17 · 120 阅读 · 0 评论 -
C语言指针数组初始化
1.char类型的指针char*names[]={"zhangsan","lisi","wangwu"};//可以这样初始化这样,每个指针指向对应的字符串2.其他类型的指针int*nums[]={1,2,3,4,5};//不可以这样初始化原因:指针的初始化或赋值可以使用0值、常量表达式、和类型匹配的对象 的地址。//指针需要用地址初始化如上,字符串字面值常...原创 2019-05-06 09:24:41 · 30973 阅读 · 4 评论 -
c++归并排序
/*** 递归:样本量发生了变化,但是过程可以复用* 写递归时先写base case,即递归退出条件* 压栈:父函数中所有的变量及行号信息都会压入栈,根据此信息依次返回父函数**//*** 归并排序:先用递归将左边的部分按顺序拍好,再将右边的部分按顺序排好* 归并:两个下标分别指向两部分的第一个数据,选较小的入辅助空间* 复杂度 :T{N} = 左部分T{N/2} + 右部...原创 2019-08-08 14:56:43 · 309 阅读 · 0 评论 -
c++ stl使用与说明
1. for_each(起始迭代器,迭代器末尾+1,函数名); //对范围内的元素进行操作,比如print2.distance(first, last)函数用来计算两个迭代器的距离3.setprecision()函数实现格式控制 使用:#include <iomanip>cout << "a=" << setprecision(2) <<...原创 2019-08-28 22:38:04 · 201 阅读 · 0 评论 -
C++智能指针
1.智能指针智能指针是一个可以模仿原生指针的模板类,与原生指针有两点区别:1智能指针只能用来保存堆上分配的内存2不能像对原生指针那样,对智能指针进行一些自增或自减之类 的算术运算智能指针自动释放不需要的对象,消除了内存泄露的可能性。通常在自由存储区创建的对象使用智能指针而不是原生指针。可以在容器中使用智能指针,如果使用一个类的基类作为智能指针的类型参数,可以用它指向一个派生类对象。...原创 2019-08-30 20:23:14 · 251 阅读 · 0 评论 -
STL算法、仿函数、配接器
STL算法、仿函数、配接器1.数值算法#include acculmate(first,last,初始值,[op])//[op]可选,当其为minus()时表示累减,multiplies() 乘,有初始值的作用之一是当输入区间为空时,认可获得一个明确定义的的结果inner_product(first1,last1,first2,init,[op1],[op2])//内积的定义a·b=a1b...原创 2019-08-30 20:26:53 · 278 阅读 · 0 评论 -
c++ lambda表达式
1.lambda表达式一个lambda表达是定义了一个匿名函数。不同于一般函数的地方时,lambda可以捕获它们作用域内的变量然后使用它们。实现:[] (double value){return valuevaluevalue;}[] lambda引入符,[]内可以空或非空,()内是lambda参数列表{}内是lambda主体内可以有若干条语句,默认返回类型为返回值的类型,没有返回值的时...原创 2019-08-30 20:56:47 · 176 阅读 · 0 评论 -
c++ 11/14新特性
1.auto关键字能够在赋值语句里推导类型,decltype能在任意场合下推导类型,但使用时必须在括号内写全表达式。auto只能用于赋值语句的类型推导,不能直接声明变量(因为无表达式供推导)auto总是推断出值类型而不是引用类型auto允许使用const/volatile/&/*等修饰,从而得到新类型auto&&总是推断出引用类型decltype (e)形式获得表...原创 2019-09-18 09:04:49 · 321 阅读 · 0 评论 -
c++各种知识点总结
C++ 参考了https://interview.huihut.com1.const作用1. 修饰变量,说明该变量不可以被改变;2. 修饰指针,分为指向常量的指针(const T *指向常量的指针,先是常量类型,再是指针)和指针常量(T *const指针常量:指针在前 常量在后);3. 常量引用(const T&),经常用于形参类型,即避免了拷贝,又避免了函数对值的修改;...原创 2019-10-07 21:26:40 · 498 阅读 · 0 评论 -
Effective C++ 笔记 part 1、2
Effective C++视 C++ 为一个语言联邦 C object-oriented C++面向对象:封装、继承、多态 Template C++泛型编程:包括TMP(Template Metaprogramming 模板元编程) STL:是一个Template程序库,包括容器、迭代器、算法、函数对象 宁以编译器替换预处理器尽量以 `const`、`enum`、`inli...原创 2019-10-11 15:40:06 · 116 阅读 · 0 评论 -
网络IO复用模型
1.poll(epoll中的LT模式,电平触发模式)poll不支持边沿触发说明 监听套接字应该设置为非阻塞模式,否则会影响服务器的并发性ret是成功写入的数据大小,10000是想要写入的数据大小应该使用下右下角的连接套接字处理过程当数据包比较大时,一个数据包要进行两次read,一次read并没有把connfd所对应的接收缓冲区的数据都读完,那么connfd仍然是活跃的,我们应该...原创 2019-04-27 15:06:54 · 1015 阅读 · 0 评论 -
C陷阱与缺陷
1.词法分析中的贪心法编译器读取多字符符号(如==,/*等符号)的原则是:每一个富豪应该包含尽可能多的字符——贪心法符号的中间不能嵌有空白(空格,制表符,换行符) ==单个符号,= =是两个符号 a---b(a--,a-b)与a-- -b含义相同,与a- --b(--b,a-b)含义不同 /*是一段注释的开始, y=x/ *p是x/指针p指向的变量值,等同于y =...原创 2019-03-26 17:06:22 · 3680 阅读 · 0 评论 -
编程问题记录
网络字节序和主机字节序不同,导致数据位置出错,Short 2字节以上用htons() 字节序对齐 #pragmapack(1)3.计时#include <time.h>clock_t startTime =clock();{待测程序}clock_t endTime=clock();cout<<"Time cost:"<<double(end...原创 2019-03-20 16:35:09 · 508 阅读 · 0 评论 -
C语言入门编程实战(一)——低配版贪吃蛇
游戏效果如图:游戏说明:通过方向键操控,按下蛇动,不按则不动- -非常简单 红色部分表示头部 每次游戏时间30s,时间结束后程序自动退出。编程语言:C语言开发环境:VS2017使用EasyX库处理界面代码如下:#include <graphics.h>#include <conio.h>#include <...原创 2018-06-05 15:13:05 · 5299 阅读 · 5 评论 -
C语言期末复习知识点总结
1. if()... else if()... //当满足if的条件时将不再对else if进行判断和操作2. 函数之间是平等的,在一个函数内部不能定义其它函数3. 强制类型转换运算的优先级高于算术运算4. 八进制前加05. int a = 3; int b = 2; printf("%f", (float)(a+b) / 2);//输出2.500000 f...原创 2018-06-05 18:17:56 · 6722 阅读 · 5 评论 -
C++入门编程实战(一)图书信息管理系统
开发语言:C++开发环境:VS2017程序说明:图书管理系统分为三个模块:添加新书、浏览全部、删除图书。 三个文件分别是Book.h(包括Book类的声明)、Book.cpp(包括Book类中各方法的具体实现)、main.cpp(包括主函数及各模块的设计) 图书管理系统主界面如图 添加新书界面浏览全部Book.h代码如下#pragma on...原创 2018-06-07 18:10:50 · 43212 阅读 · 21 评论 -
C++入门编程实战(二)商品销售系统
开发语言:C++开发环境:VS2017程序说明:商品销售系统程主要分为三部分: commodity类的声明与实现(commodity.h、commodity.cpp)、 trade类的声明与实现(trade.h、trade.cpp)、 主函数及各功能模块设计(main.cpp)及相关的预编译头文件(stdafx.h、stdafx.cpp、tarverget.h)程序的主界面及可实现的功...原创 2018-06-14 20:12:20 · 11948 阅读 · 10 评论 -
C++Primer读书笔记(二)
10.无符号数不会小于0 注意不能将带符号类型和无符号类型混合使用。11.变量声明与定义的关系 extern int i;//声明i而非定义i(只声明不定义用extern) int j;//声明并定义j extern int i=1;//定义(赋值操作抵消了extern的作用,任何包含了显示初始化的声明即为定义) 在函数体内部初始化一个extern关键字标记的变量,...原创 2018-06-10 16:23:43 · 308 阅读 · 0 评论 -
排序算法——选择排序(C++实现)
选择排序中心思想:在arr[0]-arr[N-1]中找出最小的数,与a[0]对换在arr[1]-arr[N-1]中找出最小的数,与a[1]对换在arr[2]-arr[N-1]中找出最小的数,与a[2]对换#include <iostream>#define N 10using namespace std;int main(){ int arr[N]={20,5,56,...原创 2018-07-04 15:16:17 · 2900 阅读 · 0 评论 -
leetcode 237删除链表中的节点(只给定要求被删除的节点)
难点在于只给定了一个参数,而不是链表+要删除的节点 2个参数思路:将该节点的下一个节点的值替换当前值,然后删除后面一个节点 注意这里的前提条件是链表至少包含两个元素/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next...原创 2018-09-28 11:23:17 · 367 阅读 · 0 评论 -
bug系列:free(): invalid next size (fast): 0x00000000027d5dd0 ***/leetcode 389找不同
题目:错误提示详情:思路 :建立一个频率数组存放t中每个字母出现的频率,然后减去s中该字母出现的频率 最后剩余频率不为0的字母就是添加的那个字母。错误代码:class Solution {public: char findTheDifference(string s, string t) { vector<int> freq={0};...原创 2018-10-17 20:06:45 · 410 阅读 · 0 评论 -
移位运算——获取unsigned short的高八位和低八位数值
#include "pch.h"#include <iostream>#include <string>typedef unsigned char BYTE;typedef unsigned short WORD;typedef unsigned int UINT32;using namespace std;int main(){ stri...原创 2019-02-28 10:36:21 · 10180 阅读 · 3 评论 -
muduo木铎学习(一)
作者原文:https://blog.csdn.net/Solstice/article/details/5848547#_Toc17667相关的名词解释:1.一个基于 Reactor 模式的 C++ 网络库Reactor 模式:反应器设计模式,处理并发服务请求,并将请求提交到一个或者多个服务处理程序的事件设计模式。当客户端请求抵达后,服务处理程序使用多路分配策略,由一个非阻塞的线程来...原创 2019-03-04 22:20:24 · 985 阅读 · 0 评论 -
C++Primer读书笔记(三)
1.迭代器所有标准库容器都可以使用迭代器,但只有少数容器可以使用下标。auto b=v.begin(),c=v.endl();//如果容器空,则be都指向尾后迭代器迭代器支持的运算符,*iter iter->成员,++,--,==,!=//大多数不支持<vector<int>::iterator iter;string::iterator it2;//iter可读...原创 2019-03-05 16:07:01 · 156 阅读 · 0 评论 -
最大公约数算法——欧式算法
输入:正整数x,y输出:最大公约数步骤1:x整除以y,记余数为r步骤2:若r==0则最大公约数为y,算法结束步骤3:否则将y作为新x,将r作为新y,重复上述步骤unsigned int gcd(unsigned int x,unsigned y){ unsigned int r; while(true) { r=x%y; if(r==0) return ...原创 2019-03-05 22:04:35 · 847 阅读 · 0 评论 -
生成SNMP的DLL(动态链接库)
由于C#/WPF不可以直接调用lib,只能调用dll;所以将之前的SNMP lib要改成 SNMP DLL1.下载SNMP库下载地址:http://www.agentpp.com/LIBDES-l-4.01a 解压后为libdes文件夹SNMP++v3.2.25 解压后为snmp++文件夹2.新建DLL工程将上述两个文件夹复制到工程目录下,将两个文件夹中有的.c、.cpp文...原创 2019-02-27 09:09:04 · 793 阅读 · 0 评论 -
由一个错误案例理解为什么要有成员函数
#include<iostream>using namespace std;//c++的命名空间class circle{public: double r; double pi = 3.1415926; double area = pi*r*r; };int main(){ circle pi; cout << "请输入area" <...原创 2019-03-06 15:31:21 · 121 阅读 · 0 评论 -
const关键字与指针/引用
0.const的4个作用修饰变量,说明该变量不可以被改变; 修饰指针,分为指向常量的指针【const在*左边】和指针常量【const在*右边】; 常量引用,经常用于形参类型,即避免了拷贝,又避免了函数对值的修改; 修饰成员函数,说明该成员函数内不能修改成员变量。1.const和指针int main(){const int a;//意味着azhi'duint ...转载 2019-03-06 15:55:16 · 292 阅读 · 0 评论 -
c++类的小知识点static关键字/友元/运算符重载
1.类定义在类内部的函数是隐式的内联函数引入const成员函数,这里const的作用是修改隐式this指针的类型,默认情况下this的类型是指向类类型非常量版本的常量指针。C++类对象中的成员变量和成员函数是分开存储的(内存四区:堆区、栈区、全局区、代码区模型仍然有效)成员变量:普通成员变量:存储于对象中,与struct变量有相同的内存布局和字节对齐方式静态成员变量:存储于全局数据区中...原创 2019-03-20 16:22:25 · 154 阅读 · 0 评论 -
new/delete与malloc
new/delete(堆内存) new和delete是c++的运算符,不是函数,因此执行效率高new/delete会分配内存且调用构造析构函数,说明new会初始化对象 指针变量=new 类型(常量);//从堆分配一块“类型大小的存储空间返回首地址” delete 指针变量; 指针变量=new 类型[常量]; delete[] 指针变量; 虽然为了与C语言兼...原创 2019-03-20 16:25:09 · 168 阅读 · 0 评论 -
C++primer读书笔记(一)
1.endl操纵符 效果:结束当前行,并将与设备关联的缓冲区(buffer)中的内容刷到设备中。缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正写入输出流中,而不是仅停留在内存中等待写入输入流。//在调试时添加打印语句,这类语句应该保证“一直”刷新流。否则程序崩溃是输出可能还停留在缓冲区中,从而导致程序崩溃位置的判断错误。2.::作用域运算符3.注释界定符不能嵌套注释掉包含界定符对形式注...原创 2018-06-04 14:11:30 · 355 阅读 · 0 评论