C++
宁静以致墨
慢下来,享受技术,找一个安静的位置
展开
-
在.cpp条用.c的文件
extern "C" {#include "stdarg.h"#include "patch.h"}原创 2019-12-26 14:58:42 · 235 阅读 · 0 评论 -
使用string,指针和数组 三种方法 实现回文检测
使用>> 的字符串读取(缺省)会被空格所终止;也就是它只能读取一个单词。指针问题不要用空指针进行数据访问:int* p = nullptr;*p = 7; // 糟糕回文回文是一种单词,它顺序拼写和逆序拼写的结果是相同的。例如:anna petep malayalam有两种方法判断一个单词是否是回文:获得单词逆序拼写的副本,并将其与原单词进行比较。判断...原创 2019-05-15 08:03:50 · 473 阅读 · 0 评论 -
C++ 0510 向量的拷贝
拷贝class vector{ int sz; //大小 double* elem; //指向元素的指针pulic: vector(int s) //构造函数 :sz{s},elem{new double[s]} {/*...*/} //分配内存 ~vector() //析构函数 {delet...原创 2019-05-10 07:32:12 · 953 阅读 · 0 评论 -
C++ 0506 引用和指针
类型混用:void* 和类型转换类型void* 的含义是“指向编译器不知道类型的内存空间”。void v; //错误:不存在void类型的对象void f(); //f()不返回任何东西---f()不是返回一个void类型的对象指向任何对象类型的指针都可以赋予void*void* pv1 = new int; //正确:int* 转换为void*void* pv2 = new d...原创 2019-05-06 19:09:40 · 93 阅读 · 0 评论 -
C++ 0505 析构函数
析构函数构造函数确保一个对象被正确创建并初始化。与之相反,析构函数确保一个对象销毁前被正确清理。生成的析构函数如果一个类的成员拥有一个析构函数,则在包含这个成员的对象销毁时这个析构函数会被调用。析构函数和自由空间析构函数概念上很简单,但他是大多数最有效的C++编程技术的基础。基本思想是:无论一个类对象需要使用那些资源,这些资源都要在构造函数中获取。在对象的声明周期中,他可...原创 2019-05-06 09:01:32 · 144 阅读 · 0 评论 -
C++ 0508 向量和数组(一)
向量和数组class vector{ int sz; //大小 double* elem; //指向元素的指针public: vector(int s) //构造函数 :sz{s},elem{new double[s]} {/*...*/} //分配内存 ~vector() //析构函数 {delet[] elem;} ...原创 2019-05-08 11:57:07 · 223 阅读 · 0 评论 -
C++ 0425 笔记
类接口参数类型注意代码中使用了枚举量mar的限定名Month::mar。我们没有用Month::mar,因为Month不是一个对象(而是一个类型),而mar也不是一个数据成员(而是一个枚举量-----一个符号常量)。我们在类名、枚举名或名字空间名后使用::,而在对象后使用.(点)。拷贝默认构造函数未初始化的变量可能会成为错误之源。为了解决这个问题,我们可以用构造函数来保证...原创 2019-04-25 08:00:36 · 114 阅读 · 0 评论 -
C++ 0428 指针和空间分配
文件打开文件ifstream 是用于读取文件的istream流,ofstream是用于写文件的ostream流,!ost检测文件是否成功打开。I/O错误处理good()操作成功eof()到达输入尾部fail()发生某些意外情况(例如,我们要读入一个数字,却读入了字符‘x’)bad()发生严重的意外(如磁盘读故障)读取单个值将程序分解为易管理的子模块读取结构化的...原创 2019-04-29 14:55:40 · 1318 阅读 · 0 评论 -
C++ 0424 之运算符重载
一个重载的运算符必须作用域至少一个用户自定义类型的运算对象:int operator+(int, int); //错误:不能重载内置类型+运算符Vector operator+(const Vector&, const Vector&); //正确Vector operator+=(const Vector&, int); //正确C++ 允许在同一作用域中...原创 2019-04-24 07:40:50 · 155 阅读 · 0 评论 -
C++ 0507 指针和链表的使用
指针参数和引用参数int x = 2;x=incr_v(x); //将x拷贝到incr_v(),然后将结果拷贝出来并赋予x使用指针参数警告编程者有些东西可能改变。int x = 7;incr_p(&x); //需要&incr_r(x);指针、引用和继承当我们希望很容易地移除一个元素时,应使用双向链表。struct Link{ string v...原创 2019-05-08 09:09:40 · 658 阅读 · 0 评论 -
C++之 向量、模板和异常(一)
向量、模板和异常STL容器vector的设计与实现。问题vector<double> vd; //double类型元素for(double d; cin>>d;) vd.push_back(d); //扩展vd以容纳所有元素vector<char> vc(100); //char类型元素int n;cin>>n;v...原创 2019-05-21 07:06:22 · 247 阅读 · 0 评论 -
C++ 0511 向量的移动
拷贝赋值我们可以通过构造函数拷贝(初始化)对象,但我们也可以通过赋值的方式拷贝vector。拷贝术语<<是输入运算符,就是将大头的那边的量弄进箭头所指的对象中,并返回运算之后的箭头所指的对象移动vector fill(istream& is){ vector res; for(double x; is>>x;) res.push...原创 2019-05-11 07:37:23 · 639 阅读 · 0 评论 -
extern "C " 的作用
extern "C "只是表示这个可以被C语言调用,除了这个之外,没有什么更多含义。因为C语言的编译器和C++的不同,C++的会有个叫做函数名打散的机制,比如函数:int add(int a,int b)在C++里面编译之后,就不是int add(int a,int b),而是类似:int add@WEROIUERH(int a,int b)的函数名,而...原创 2019-06-04 13:20:20 · 197 阅读 · 0 评论 -
C++之算法和映射
算法和映射标准库算法标准库大约提供了80种有用的算法。挑选的标准算法r = find(b,e,v) r值想[b:e]中v首次出现的位置r = find_if(b,e,p) r指向[b:e]中令p(x)为true的第一个元素xx = count(b,e,v) x为v在[b:e]中出现的次数x = count_if(b,e,p) x为[b:e]中满足p(x)为t...原创 2019-05-29 11:16:15 · 943 阅读 · 0 评论 -
C++容器和迭代器(二)
vector类的RAIItemplate<typename T, typename A>void vector<T,A>::reserve(int newalloc){ if (newalloc<=space) return; //从不减少分配的内存 T* p = alloc.allocate(newalloc); //分配新空间 f...原创 2019-05-28 16:34:58 · 142 阅读 · 0 评论 -
代码整洁之道读书笔记(一)
later equels never写整洁代码,需要遵循大量的小技巧,贯彻刻苦习得的“整洁感”。这种“代码感”就是关键所在。简言之,编写整洁代码的程序员就像是艺术家,他能用一系列变换把一块白板变作由优雅代码构成的系统。不要重复代码,只做一件事,表达力,小规模抽象。有意义的命名通过阅读大量程序代码,可以找到一种对代码好坏的判断标准,就像要称为好的作家必须阅读大量的书籍、...原创 2019-05-30 08:54:18 · 165 阅读 · 0 评论 -
C++ 0513 向量和数组(二)
对const向量重载运算符void f(const vector& cv){ double d=cv[1]; //错误,但本应是正确的 cv[1]=2.0; //错误(本该如此)}其原因在于我们的vector::operator[]()可能会潜在地改变vector对象。即使它实际上没有改变,编译器仍会认为这是一个错误,因为我们忘了将这一情况告诉编译器。解决方案...原创 2019-05-13 08:03:22 · 337 阅读 · 0 评论 -
C++容器和迭代器
模板泛型编程: 编写能够正确处理以参数形式呈现的各种类型的代码,只要这些参数类型满足特定的语法和语义要求。容器和迭代器STL是一个用于处理C++程序中数据的可扩展框架。存储和处理数据double* get_from_jack(int* count); //jack将double值存入一个数组并将元素籍由*count返回vector<double>* get_...原创 2019-05-22 08:03:24 · 469 阅读 · 0 评论 -
访问向量元素的三种方法
访问vector元素1、class vector{ int sz; //大小 double* elem; //指向元素的指针public: //... double operator[](int n){return elem[n]}; //返回元素};vector v(10);double x = v[2]; //很好v[3] = ...原创 2019-05-12 18:07:06 · 1502 阅读 · 0 评论 -
C++之 链表及auto的使用
链表template<typename Elem>struct Link{ Link* prev; //前趋连接 Link* succ; //后继(下一个)连接 Elem val; //值}template<typename Elem>class list{ };我们能够将每一容器的迭代器都命名为literato...原创 2019-05-25 09:48:45 · 833 阅读 · 0 评论 -
make file 加载.a库的方法
库的名字:libcharge.amake file 文件的填写obj_y += charge.a原创 2019-04-18 22:10:44 · 1744 阅读 · 0 评论 -
C++ 0423之枚举
枚举类型enum class Month{jan=1, fed, mar, apr, may, jun, aug, sep, oct, nov, dec};一个枚举定义的体就是一个简单的枚举列表。enum class 中的class表示枚举量在枚举作用域内,也就是说,必须用Month::jan来表示jan。Month m2 = feb; //错误:feb不在作用域内m = 7; /...原创 2019-04-23 07:40:00 · 123 阅读 · 0 评论 -
多引脚的编程应用
const GPIO_CONF SBC_io_conf_b[COLOR_BIT_NUM]={ {SBC_B0_GPIO_PORT,SBC_B0_PIN}, {SBC_B1_GPIO_PORT,SBC_B1_PIN}, {SBC_B2_GPIO_PORT,SBC_B2_PIN}, {SBC_B3_GPIO_PORT,SBC_B3_PIN}, {SBC_B4_GPIO_PORT,SBC_B原创 2017-09-12 17:28:17 · 328 阅读 · 0 评论 -
\r\n的意义
\r : return 到当前行的最左边。\n: newline 向下移动一行,并不移动左右。Linux中\n表示回车+换行;Windows中\r\n表示回车+换行。Mac中\r表示回车+换行。转载 2017-08-16 15:52:26 · 1486 阅读 · 0 评论 -
MFC 打印.txt文件
union { short pp; unsigned char ch[2]; }change; int acc_x_origine =0; int acc_y_origine =0; int acc_z_origine =0; int acc_x = 0;原创 2017-07-18 09:21:31 · 800 阅读 · 0 评论 -
嵌入式USB上位机的制作
1、首先生成MFC应用程序。2、然后把usb的程序加进去。3、安装生成USB驱动的程序。libusb-win32-devel-filter-1.2.6.0.exe上面是USB的生成工具,输入在网上可以下到。最后搞定。原创 2017-01-25 09:56:09 · 1604 阅读 · 0 评论 -
DECLARE_MESSAGE_MAP( ) 消息映射
DECLARE_MESSAGE_MAP( ) 说明: 你的程序中的每一个CCmdTarget的派生类都可以提供一个消息映射以处理消息。在你的类声明的末尾使用DECLARE_MESSAGE_MAP宏。然后,在实现了类成员函数的.CPP文件中加入BEGIN_MESSAGE_MAP宏,再加入每个消息处理函数的宏入口,最后使用END_MESSAGE_MAP宏。 注意: 如果你在DECL转载 2017-01-25 09:47:11 · 594 阅读 · 0 评论 -
C++Build学习2
C++ Builder 中的字符串类型可分大概分为ANSI字符串与Null-Terminated字符串两类;前者是C++Builder特有的字符串类型(和Delphi中的String类型是一样的),后者是C语言中惯用的以零字符作为字符串结束的类型。C++ Builder 中的String字符串类型又分为字符串(AnsiString)、宽字符串(WideString)。原创 2016-05-18 08:37:37 · 925 阅读 · 0 评论 -
C++ Builder 学习1
#include#pragma hdrstop#include "Unit1.h"#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;_fastcall TForm1::TForm1(TComponent* Owner) :TForm(Owner){原创 2016-05-17 16:21:12 · 1123 阅读 · 0 评论 -
程序的简述1
程序的简述要查看工程管理器时,可以选择主菜单上的View Project Manager命令。1、主要的文件简述project1.bpr:工程描述文件,里面是此工程的描述。project1.cpp:工程的主文件,里面是程序执行时的进入点,#include #pragma hdrstopUSERES("Project1.res");USEFORM("U原创 2016-05-16 22:56:05 · 508 阅读 · 0 评论 -
C++ 命名空间
https://www.cnblogs.com/zhoug2020/p/5972439.html一、 为什么需要命名空间(问题提出)命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它...转载 2018-06-01 09:34:36 · 281 阅读 · 0 评论 -
c++ pair 对组学习
参数:T1是第一个值得数据类型,T2是第二个值的数据类型。功能:pair将一对值组合成一个值, 这一对值可以具有不同的数据类型(T1和T2), 两个值可以分别用pair的两个公有函数first和second访问。具体用法:1.定义(构造):pair<int ,double> p1;//默认构造函数pair<int ,double> p2(1, 2...转载 2018-06-01 11:05:39 · 214 阅读 · 0 评论 -
strdup与strcpy具体的区别
strdup 原型:extern char *strdup(char *s); 用法:#include <string.h> 功能:复制字符串s 说明:返回指向被复制的字符串的指针,所需空间由malloc()分配且可以由free()释放。 举例: // strdup.c#include <syslib.h> #include <string.h> main() ...转载 2018-06-01 11:09:04 · 256 阅读 · 0 评论 -
C++学习之0418 constexpr函数
在编译时对函数进行计算的想法可通过将函数声明为constexpr来实现。constexpr double xscale = 10;constexpr double yscale = 0.8;constexpr Point scale(Point p) {return { xscale*p.x, yscale*p.y};};void user(Point p1){ Point...原创 2019-04-18 07:59:44 · 201 阅读 · 0 评论 -
C++学习之0415 对函数细节的学习
再多的天赋也战胜不了对细节的偏执函数和变量定义消耗了内存,而声明却没有。const int y;// 错误如果一个常量没有值的话,它何以为常量呢?作用域的主要作用是保持名字的局部性,不影响声明于其他地方的名字。一个名字的作用域越大,名字就应该越长、越有描述性:将全局变量命名为x、y和f是灾难性的。C++还提供了一种语言特性:名字空间,专门用于表达作用域。在函数声明和定义中...原创 2019-04-15 07:55:46 · 166 阅读 · 0 评论 -
C++学习0414之C++ vector 容器
一、什么是vector?向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。二、容器特性1.顺序序列顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。2.动态数组支持对序列中的任意元素进行快速直接访问...原创 2019-04-14 17:05:08 · 150 阅读 · 0 评论 -
C++学习0413之迭代器 iterator
迭代器 iterator迭代器是一种检查容器内元素并遍历元素的数据类型。C++更趋向于使用迭代器而不是下标操作,因为标准库为每一种标准容器(如vector)定义了一种迭代器类型,而只用少数容器(如vector)支持下标操作访问容器元素。一.定义和初始化每种容器都定义了自己的迭代器类型,如vector:vector<int>::iterator iter; //定...原创 2019-04-14 15:07:01 · 308 阅读 · 1 评论 -
constexpr函数
有点难理解权且记住,使用才会体会其中真正的差别。常量表达式的概念:在编译期就可以计算出结果的表达式。那么为什么要用常量表达式呢,用常量表达式会有什么好处:1.允许一些计算只在编译时进行一次,而不是每次程序运行时;2.编译器可以进行尺度更大的优化;3.可以用在需求编译期间常量的上下文,例如数组长度等;使用constexpr修饰变量时:const 变量的初始化可以延迟到运行时,...原创 2019-04-17 08:02:00 · 3437 阅读 · 0 评论 -
C++学习之0416 对函数细节的学习(二)
在函数中我们可以直接操作任何引用方式传递来的对象。double x = 1;double y = 2;swap(x,y);void swap(double& d1, double& d2){ double temp = d1; d1 = d2; d2 = temp;}传值和传引用的对比void f(int a, int& r,...原创 2019-04-16 07:48:31 · 143 阅读 · 0 评论 -
C++学习0410
C++ 类定义需要注意的是,私有的成员和受保护的成员不能使用直接成员访问运算符 (.) 来直接访问.class 有点像C语言的结构体。类成员函数:类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。class Box{ public: double length; // 长度 double breadth; ...原创 2019-04-11 21:04:25 · 190 阅读 · 0 评论