c++基础
yangyang031213
QQ:1325989310
微信:18792430347
C++/QT/C/linux/MFC...
展开
-
类的const成员函数
类的const成员函数类成员函数如果使用const进行修饰,则表明该函数不会修改该类的状况,不会改变类成员信息等,如下所示:class Date{ int d,y,m;public: int month()const;};内部声明时使用const后缀进行修饰,外部定义时也需要使用const进行修饰:int Date::month() { return y++;}如上原创 2017-02-19 16:11:17 · 364 阅读 · 0 评论 -
c++11不定参数模板
需要一个结束递归的函数://不定参数模板//non-template function,结束递归template <typename T>void print(const T & arg){ qDebug()<<__PRETTY_FUNCTION__<<arg;}template <typename T,typename .....原创 2018-11-15 18:26:36 · 3026 阅读 · 0 评论 -
c++11 lambda表达式
调用和传入参数 //lambda []{ qDebug()<<"直接调用 lambda"; }();//直接调用 auto func3 = []{ qDebug()<<"lambda"; }; func3();//调用 auto func4 = [](const QString &a...原创 2018-11-15 18:23:23 · 630 阅读 · 0 评论 -
c++消息映射到处理函数(类似表驱动或者消息映射)
头文件,消息定义,函数指针声明、处理函数声明、消息产生函数声明:#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QDebug>#include <map>namespace Ui {class MainWindow;}enum Msg //消息...原创 2018-06-17 00:22:40 · 1611 阅读 · 0 评论 -
std::vector std::map使用时需要注意的情况
1、std::vector::erase导致一些数据没有erase std::vector<int>vec; vec.push_back(1); vec.push_back(2); vec.push_back(2); vec.push_back(3); vec.push_back(4); for(int i = 0;i &l...原创 2018-06-16 23:11:09 · 1967 阅读 · 0 评论 -
sscanf_s使用
sscanf_s使用使用sscanf_s时会出现一些问题,特别是容易出现栈溢出,字符串溢出问题,所以需要在格式化时严格的控制,另外,在sscanf_s中使用%c格式化时,需要在对应的字符之后加上缓冲器大小,如下使用:int main(){ char s[] = "192.30.1.55"; unsigned char ss[7] = { 0 }; sscanf_s(s, "原创 2017-02-19 16:12:58 · 2742 阅读 · 0 评论 -
一个死循环
一个死循环代码:#include <iostream>using namespace std;int main(){ int i, arr[10]; cout<<"i:"<<&i<<endl<<"arr[0]:"<<&arr[0]<<endl<<"arr[9]:"<<&arr[9]<<endl<<"arr[10]:"<<&arr[10]<<endl; for (i = 0原创 2017-02-19 18:14:56 · 590 阅读 · 0 评论 -
异或交换元素值
异或交换元素值#include <stdio.h>int main(){ int num1 = 2;//010 int num2 = 3;//011 num1 = num1^num2;//001 num2 = num1^num2;//010 num1 = num1^num2;//011 printf("num1=%d num2=%d\n", num1原创 2017-02-19 18:16:13 · 357 阅读 · 0 评论 -
二进制中1的个数
二进制中1的个数1、普通做法,每次除2取余位1则加1:#include <stdio.h>int main(){ int num = 15; int count = 0; int i = 0; for (i = 0; i <= 32;i++)//while(num) { if (num % 2 == 1) {转载 2017-02-19 18:12:37 · 239 阅读 · 0 评论 -
子类继承父类同名变量处理
子类继承父类同名变量处理子类继承父类出现同名变量时,如下,B继承A,存在同名变量m1,需要使用基类A中的m1时,使用b.A::m1即可使用:#include<iostream>using namespace std;class A{public: int m1;};class B:public A{public: int m1; int m2;};int mai原创 2017-02-19 18:09:04 · 690 阅读 · 0 评论 -
algorithm中for_each用法
algorithm中for_each用法algorithm中for_each用于遍历和执行一些事情,如下代码将打印1-7:#include<iostream>#include<vector>#include<algorithm>using namespace std;template <typename T>class print{public: void operator(原创 2017-02-19 18:07:25 · 737 阅读 · 0 评论 -
new失败的处理方法
new失败的处理方法常常会见到这样的代码:int *p=new int;if(p!=0){ return -1;}实际上,现在new失败的处理方法是抛出bad_alloc()异常,所以上述代码实际上不会执行到return -1;的部分,new失败不会将指针置空。正确处理方式应该是这样:1、new之后catch异常:int main(){ const int size=10原创 2017-02-19 17:35:53 · 1108 阅读 · 0 评论 -
格式转换说明符scanf,printf
格式转换说明符scanf,printf转自:https://my.oschina.net/jinzei/blog/98699相信不管大神还是菜鳥,都认得printf.它家还有兄弟sprintf,scanf,sscanf…$^&* 当你华丽丽的写下char c=’c’;printf(“char=%d”,c);的时候,一切都还是那么美好. 不过当你声明一个char buf[2];然后sscanf(原创 2017-02-19 16:11:56 · 3462 阅读 · 0 评论 -
位域
位域当我们需要节省内存,比如某个变量值只有0和1两种状态,或者两个值都只是不超过127的数,如何节省内存呢?当然可以直接定义变量进行位操作,但是位操作往往会涉及到较多的& |之类的操作,往往不能让人一眼就明白要表达的意思。实际上,使用“位域”可以轻松实现上述需求,并且可读性较强。 - 使用位操作: 代码:int main(){ unsigned char a=0; a=a&0x原创 2017-02-19 16:10:40 · 404 阅读 · 0 评论 -
free、delete与delete[]的使用
free、delete与delete[]的使用首先new与delete成对出现,自己的代码中需要对自己new出来的东西负责。 一般来说,new一个对象的话delete它就好了,但是new[]的话需要使用delete[],实际上,对于基本类型,new[]之后delete与delete[]差别不大,但是对于对象,由于对象析构函数的存在,delete将只会调用数组第一项的析构函数,而delete[]则会原创 2017-02-19 16:09:38 · 2124 阅读 · 1 评论 -
c++11pair和tuple
pair是map的元素,tuple是基于不定参数模板,对pair的扩充。//pair和tuple std::pair<int,QString>pair1{1,"22222222222222"}; auto pair2 = std::make_pair<int,int>(1,2); auto pair3 = std::make_pair(1,2);...原创 2018-11-15 18:28:51 · 549 阅读 · 0 评论