C++记录(一)
1
extern 符表示该变量不是当前作用域定义的,用于声明。
如extern i;表示i不是当前作用域里的,是其他某个include的cpp文件里的变量。
2
int *p=0;相当于初始化p为空指针。
3
指针是对象,引用不是对象。所以可以取指针的指针或者指针的引用,但不可以取引用的指针。
指针一定要指向对象。
4
const int x=1;
const int *p=&x; //p为指向常量的指针
int * const q=&x; //q为常量指针,即q只能指向x,不能更改为指向其他变量
没有int & const p;这种写法
5
typedef int* p; //命名int*为p,即p x;等同于int *x;
const 修饰typedef的新类型名时,const优先与新类型名结合,如const p *x;表示(const p) * x,即常量
6
可以利用auto &c:s遍历字符串s中的每个元素,并且c是作为引用指向对应的元素的,可以用来遍历修改s中的某些元素,如下修改s中字母为大写。
// #include <stdio.h>
#include <iostream>
#include <string>
#include <cctype>
// #include <string.h>
// #include <cstring>
// using std::cin;
// using std::cout;
using namespace std;
int main()
{
string s="fewqfqdwqteqwghrte";
for(auto &c:s)
{
c=toupper(c);
}
cout<<s;
system("pause");
return 0;
}
7
->完全等价于先解引用再.操作,如下:
int main()
{
string s("412343141");
string *t=&s;
cout<<(*t).empty();
cout<<t->empty();
getchar();
}
之前一直以为只有是类的指针取类里的子数据才能用->符号,今天学习了
8
i++相当于int temp=i;i+=1;i=temp;三个语句,返回右值
++i只有自增一步,并且返回左值
9
a&(-a)截取a的二进制位最后一位为1的数字,如a=10100,a&(-a)等于00100
a&(a-1)删除a的为1的最右侧位。
10
顶层const即变量本身为常量,底层const是变量(指针、引用)指向的是常量。
11
int转string std::to_string,该函数不光可以转整数,所有无符号、long、long long、单双精度浮点数都可以。
string转int stoi()
char * 转int atoi()
另外可以用sprintf将多个元素用指定的格式写入字符串(和printf函数类似,只是后者写到屏幕,前者写入字符串),返回写入的字符数
eg:
int main()
{
char s[14];
cout<<sprintf(s,"%d,%.1f",1,2.5)<<endl;
cout<<s;
getchar();
return 0;
}
输出:
同理sscanf可以将某字符串内容以指定格式分割写入多个变量
一篇讲sscanf的博客
还可以用stringstream,这个比较慢一般不用。
eg:
int main()
{
stringstream ss;
string s;
ss<<124;
ss>>s;
cout<<s;
getchar();
return 0;
}
12
explicit用来防止类的构造函数的隐式转换。
例子如下:
新一点的c++如vs2019里不用编译就会报错。
class Test1
{
public:
Test1(int n)
{
num=n;
}//普通构造函数
private:
int num;
};
class Test2
{
public:
explicit Test2(int n)
{
num=n;
}//explicit(显式)构造函数
private:
int num;
};
int main()
{
Test1 t1='a';//隐式调用其默认拷贝构造函数,成功
Test2 t2=12;//编译错误,不能隐式调用其构造函数
Test2 t2(12);//显式调用成功
return 0;
}
13
static修饰局部变量生成局部静态对象。在第一次经过时初始化,之后一直存留在全局变量区。即在函数中第一次遇到该语句,初始化整个变量,但依然还是局部变量(其他函数中不可见),但若再次进入当前函数,不再执行初始化语句,而是直接使用之前保存好的值。
#include <stdio.h>
void test()
{
static int num = 0;
num++;
printf("%d ", num);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
test();
}
return 0;
}
14
initializer_list可以传入不定个形参,但一定是同一类型的,类型要指定好,如下面这样。
int f(initializer_list<int> p)
{
for (auto x : p)
{
cout << x << endl;
}
return 0;
}
15
inline函数(内联函数)是为了替换宏函数来的,更加安全。inline关键字应该在函数定义的时候加,声明的时候加inline是没有用的。
关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。
16
class、struct占用的空间一定是成员变量最大类型长度的整数倍(数据对齐)
如下面:
A类a占0号字节,空一格,b占2~3,c占4 ~7,d占8 ~15,总占用0 ~15,16个字节。
B类b占0 ~3,空四格4 ~7(四个字节),a占8 ~15,c16 ~17,d18,目前总长度19,但B中最大变量double长度8个字节,而82=16,83=24,故还要填24-19=5个字节。
17
C++容器的size函数返回的都是size_t类型,这个类型是unsigned int,简单的int siz=s.size()。比如在for循环里这样写:
for(int i=0;i<s.size()-1;++i)
{
当s为空时,s.size()-1的值为ffffffff,表示4294967295,而不是我们想要的-1。
这种情况for会进入循环,这不是我们想要的。
所以解决办法:为空提前单独判断
18
C++记录(一)的更多相关文章
- 记一次debug记录:Uncaught SyntaxError: Unexpected token ILLEGAL
在使用FIS3搭建项目的时候,遇到了一些问题,这里记录下. 这里是发布搭建代码: // 代码发布时 fis.media('qa') .match('*.{js,css,png}', { useHash ...
- nginx配置反向代理或跳转出现400问题处理记录
午休完上班后,同事说测试站点访问接口出现400 Bad Request Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...
- Kali对wifi的破解记录
好记性不如烂笔头,记录一下. 我是在淘宝买的拓实N87,Kali可以识别,还行. 操作系统:Kali 开始吧. 查看一下网卡的接口.命令如下 airmon-ng 可以看出接口名称是wlan0mon. ...
- 2015 西雅图微软总部MVP峰会记录
2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一次写会议记录,写得不好的地方希望各位园友见谅 ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 我是如何在SQLServer中处理每天四亿三千万记录的
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...
- 前端学HTTP之日志记录
前面的话 几乎所有的服务器和代理都会记录下它们所处理的HTTP事务摘要.这么做出于一系列的原因:跟踪使用情况.安全性.计费.错误检测等等.本文将谥介绍日志记录 记录内容 大多数情况下,日志的记录出于两 ...
- ASP.NET Core应用中如何记录和查看日志
日志记录不仅对于我们开发的应用,还是对于ASP.NET Core框架功能都是一项非常重要的功能特性.我们知道ASP.NET Core使用的是一个极具扩展性的日志系统,该系统由Logger.Logger ...
- python+uwsgi导致redis无法长链接引起性能下降问题记录
今天在部署python代码到预生产环境时,web站老是出现redis链接未初始化,无法连接到服务的提示,比对了一下开发环境与测试环境代码,完全一致,然后就是查看各种日志,排查了半天也没有查明是什么原因 ...
- 记录我这一年的技术之路(nodejs纯干货)
2015年12月28日23:19:54 更新koa应用.学习型网站和开发者工具等 coding伊始 开始认认真真的学习技术还是2015.10.21日开始的,记得很清楚,那天,是我在龙湖正式学习的第一天 ...
随机推荐
- 2个月,我从编程小白成为了Python研发工程师
从编程小白,到Python研发工程师,需要多久呢? 答案就是:91门课,450个小时. 听起来似乎难以实现,但其实如果每天抽出八小时学习,两个月的时间,就能由编程小白转变成为Python工程师,听起来 ...
- 如何使用cmd操作数据库
1.首先用win+r输入cmd打开命令工具 (https://www.mysqlzh.com/=>'mysql中文文档地址') 然后用cd 命令进入你mysql的根目录 (bin目录下) 输入命 ...
- Python警告:InsecureRequestWarning、InsecurePlatformWarning、SNIMissingWarning
SSL警告 urllib3将基于证书验证支持的级别发出几种不同的警告.这些警告表示特定情况,可以通过不同方式解决. InsecureRequestWarning 当在未启用证书验证的情况下对HTTPS ...
- HDU1010 --- Tempter of the Bone(dfs+剪枝)
小明做了一个很久很久的梦,醒来后他竟发现自己和朋友在一个摇摇欲坠的大棋盘上,他们必须得想尽一切办法逃离这里.经过长时间的打探,小明发现,自己所在的棋盘格子上有个机关,上面写着“你只有一次机会,出发后t ...
- easyui只显示年月,时间格式
<div > <input id="db" /> </div> <script> /*power by showbo http:// ...
- H5与native 普及
H5与native 普及: H5是基于web,native基于客户端native是使用原生系统内核的,相当于直接在系统上操作.,是我们传统意义上的软件,更加稳定.但是H5的APP先得调用系统的浏览器内 ...
- hdu 5917
题意:给你一个无向图,问图中有多少个符合条件的集合?条件为这个集合里面存在一个子集(大小>=3)为团或者都是孤立点.答案mod1e9+7: 根据 Ramsey定理,大于等于6个的集合,肯定存在一 ...
- Codeforces 524C.The Art of Dealing with ATM(暴力)
我先采用了智障解法(n * n枚举...刚开始把n看成1000了还以为能过) 理所当然的t了,不过我怀疑优化一下能过?(感觉数据不太行的亚子 然后就是O(n * k * k)的解法,看到好多人快乐二分 ...
- vs2019 scanf 解决 C4996问题
1. 首先选择项目 2. 然后选择最下面那行的 工程属性, 其后于此处 3. 添加上 :_CRT_SECURE_NO_WARNINGS 最后保存,使用 scanf 读取即无报错了
- npm解决node-sass安装失败
npm装包一直都很成功,直到我遇见了node-sass这个包 我一直报这样的错误 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! node-sas ...