C++笔记记录

1、C++中关于class B:A与Class B::A问题

class B:A为类的继承关系,即A类是B类的基类
class <派生类名>:<继承方式><基类名>
{
<派生类新定义成员>
};
Class A::B为类的嵌套关系,即A类是B类内部的类,双冒号为作用域
https://www.cnblogs.com/inrgihc/p/8203395.html

2、C++中的冒号:

(1)将.h声明定义的函数在.cpp文件中写出来
(2)c++中冒号:也可表示赋值功能https://blog.csdn.net/qinrenzhi/article/details/84940106
在这里插入图片描述

3、时间基准

以1900年1月1日0时为起点推算万年历,在万年历中就可以准确知道今天距离历史上的某一天过去了多少天(可以看作一种程序规则)。

举个例子,在万年历中你可以知道今天距离1949年10月1日过去了多少天。
再举个例子,GPS原子时是从1980年1月6日午夜(0小时0分0秒)开始,在万年历这个时间规则中,就可以准确计算此次此刻距离GPS原子时起点过去了多少秒。
http://blog.okbase.net/PanicNet/archive/2998.html

4、常用库函数percentile、insert()、.norm()

<math.h> percentile 百分比
CHECK
C++中的insert()函数:https://blog.csdn.net/sugarbliss/article/details/88621437
.norm()函数:https://blog.csdn.net/gxiaob/article/details/8471158
sprintf函数定义在stdio.h中

char str[20];
double f=14.309948;
sprintf(str,"%6.2f",f);

5、vector容器知识

vector.begin()、vector.end()
获取向量的前n个元素:vector.head(n);
获取向量尾部的n个元素:vector.tail(n);
获取从向量的第i个元素开始的n个元素:vector.segment(i,n);
vector.reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_back()/insert()函数。
vector.resize是改变容器的大小,且在创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。此时再调用push_back()函数,是加在这个新的空间后面的。
(https://blog.csdn.net/sugarbliss/article/details/88621437)
vector A= vector(10, 1);表示声明一个初始值全为1长度为10的float类型容器
vector::assign()参考博客

6、让c++返回多个函数值

tuple、make_tuple、tie,使用这三个可以在c++函数中返回多个值
tuple元组使用方法:
https://blog.csdn.net/sevenjoin/article/details/88420885
https://www.jb51.net/article/196972.htm
std::tuple是C++ 11中引入的一个非常有用的结构,以前我们要返回一个包含不同数据类型的返回值,一般都需要自定义一个结构体或者通过函数的参数来返回,现在std::tuple就可以帮我们搞定。
make_tuple可以生成元组数据。
std::get< n>(tuple)可以获得tuple中第n个数据
tie可以将 tuple 解包为独立对象:https://www.cnblogs.com/RioTian/p/14076214.html

7、目前用到过的内存管理:shared_ptr、make_shared、cache、std::mutex

std::mutex说明 https://blog.csdn.net/faihung/article/details/88411839
cache说明 https://blog.csdn.net/l471094842/article/details/105599876/?utm_term=c++cache%E6%93%8D%E4%BD%9C&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-0-105599876&spm=3001.4430

8、c++中uint16_t、uint32_t、uint64_t的区别

总结就是有无符号的区别,表示的数值范围不同,后面有_t表示正数
https://blog.csdn.net/weixin_34133829/article/details/86054430

9、fstream文件流

#include <fstream>  
ofstream         //文件写操作 内存写入存储设备   
ifstream         //文件读操作,存储设备读区到内存中  
fstream          //读写操作,对打开的文件可进行读写操作

10、Map String String

https://blog.csdn.net/weixin_41585557/article/details/89680244
map.find与map.end()
https://blog.csdn.net/qq_33726635/article/details/115741594
很全的资料(链接

11、C++中的问号?

#include <iostream>
using namespace std;
int main ()
{
   // 局部变量声明
   int x, y = 10;
   x = (y < 10) ? 30 : 40;
   cout << "value of x: " << x << endl;
   return 0;
}
输出结果:value of x: 40

11、map 迭代器iterator使用

std::map<string, string>::iterator iter 

参考博客

12、static关键字的3种用途

https://blog.csdn.net/weixin_40311211/article/details/82851300

void Widget::timerEvent(QTimerEvent *)
{
    static  int num=1;//只初始化一次内存,再运行这个函数时不再重新设置num
    ui->label_2->setText(QString::number(num++));
}

13、类的封装、继承,public、protected及private用法,以及类的模板

参考博客
c++类和对象
c++类_模板
一段关于类的模板的小程序

#include<iostream>
using namespace std;
template<int T>
class A
{
public:
	 A()
	{
		a= T;
	}
	static int Get_A()
	{
		cout << a << endl;
		return a;
	}
	static int Change_A(int m)
	{
		a = m;
		cout << a <<endl;
		return a;
	}
	static int GetA_and_T()
	{
		cout << a + T << endl;
		return (a + T);
	}
private:
	 int static a;
};
int A<1>::a = 10;
typedef A<1> A1;
int main()
{
	A1::Get_A();
	int b=A1::Change_A(5);
	int c= A1::GetA_and_T();
	return 0;
}

14、C++set用法

参考博客
前路漫漫的C++之路~

15、static_cast强制转换

mpCurrentMap = static_cast<数据类型>(值);
参考博客

16、unique_lock多线程

参考博客

17、std::copy指针、back_inserter插入迭代器用法

将bar的vector数据插入到foo后边
std::copy (bar.begin(),bar.end(),back_inserter(foo));

18、C++中的取整

int:去除小数位
floor:向下取整
ceil:向上取整
round:四舍五入

19、pair及pair在vector中的使用

类模板:template<class T1,class T2> struct pair

参数:T1是第一个值得数据类型,T2是第二个值的数据类型

例如:

pair<string, double>p

20、C++ List总结

.back() //返回列表的最后一个元素
.begin()和.end()表示指向列表的第一个元素和最后一个元素的迭代器
.front() //指向列表的第一个元素
.push_front //向列表首部添加元素
.push_back //向列表尾部添加元素

以下代码测试了列表的迭代器,当列表新添加元素后,迭代器所指向的元素也不会改变!

#include<iostream>
using namespace std;
#include <list>   
int main()
{
	list<int> a;
	a.push_back(0);
	a.push_back(1);
	a.push_back(2);
	list<int>::iterator it = a.begin();
	a.push_front(-1);
	cout << *it << endl;
}

list的erase用法参考博客

21、三种继承方式public,private,protected比较

参考博客

22、UShort

short是2个字节,16位,存数据的只有低15位,最高位是符号位,在计算机里,有符号数符号位1代表负,0代表正。无符号数就是用16位来表示这个short型数据,表示范围增大但只能表示正数。
UShort最大表示的结果是4294967295

#include <iostream>
using namespace std;
 
int main()
{
 
	unsigned int a=1;
	for (int i=30;i>=0;--i){    
		//左移31次,每次左移加1,将个位补1,最后就是32个1
		a<<=1;
		//a<<=1与a<<1的区别:
		//<<=是左移赋值运算符,a<<=b是把a的二进制数左移b位,然后把结果赋值给a;
		//<<是左移运算符,a<<b是把a的二进制数左移b位。
		++a;
	}
	cout<<a<<endl;
	return 0;
 
}

23、二进制运算符

二进制与运算符(&)
其规则是逐位比较两个运算子,两个二进制位之中只要有一个位为0,就返回0,否则返回1。

0 & 3 // 0 

上面代码中,0(二进制00)和3(二进制11)进行二进制与运算会得到00(即0)。
二进制与运算符(~)
其将每个二进制位都变为相反值(0变为1,1变为0)。它的返回结果有时比较难理解,因为涉及到计算机内部的数值表示机制。

~ 3 // -4 

上面表达式对3进行二进制否运算,得到-4。之所以会有这样的结果,是因为位运算时,JavaScript 内部将所有的运算子都转为32位的二进制整数再进行运算。
3的32位整数形式是00000000000000000000000000000011,二进制否运算以后得到11111111111111111111111111111100。由于第一位(符号位)是1,所以这个数是一个负数。JavaScript 内部采用补码形式表示负数,即需要将这个数减去1,再取一次反,然后加上负号,才能得到这个负数对应的10进制值。这个数减去1等于11111111111111111111111111111011,再取一次反得到00000000000000000000000000000100,再加上负号就是-4。考虑到这样的过程比较麻烦,可以简单记忆成,一个数与自身的取反值相加,等于-1。
参考博客
原码、反码、补码(参考博客
补码:
最高位为符号位,0表示正数,1表示负数。
正数的补码等于本身,负数的补码等于反码+1

24、模板(template)使用介绍

参考博客

25 、char的理解

char用于C或C++中定义字符型变量,只占一个字节,取值范围为 -128 ~ +127(-2^7 ~2^7-1)。而unsigned char则是0~255,字符型所存储的数据是用来表示字符的,例如ASCⅡ或Unicode。

include<iostream>
using namespace std;
int main()
{
    signed char x = 'a';
    unsigned char xx = 'a';
    cout << sizeof(x) << endl;
    cout << sizeof(xx) << endl;
    cout << int(x) <<endl;
    cout << int(xx) << endl;
    return 0;
}

ASCII码表链接,link

26、const

to do…

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值