C++学习笔记
- 1、C++中关于class B:A与Class B::A问题
- 2、C++中的冒号:
- 3、时间基准
- 4、常用库函数percentile、insert()、.norm()
- 5、vector容器知识
- 6、让c++返回多个函数值
- 7、目前用到过的内存管理:shared_ptr、make_shared、cache、std::mutex
- 8、c++中uint16_t、uint32_t、uint64_t的区别
- 9、fstream文件流
- 10、Map String String
- 11、C++中的问号?
- 11、map 迭代器iterator使用
- 12、static关键字的3种用途
- 13、类的封装、继承,public、protected及private用法,以及类的模板
- 14、C++set用法
- 15、static_cast强制转换
- 16、unique_lock多线程
- 17、std::copy指针、back_inserter插入迭代器用法
- 18、C++中的取整
- 19、pair及pair在vector中的使用
- 20、C++ List总结
- 21、三种继承方式public,private,protected比较
- 22、UShort
- 23、二进制运算符
- 24、模板(template)使用介绍
- 25 、char的理解
- 26、const
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…