C++学习记录
1.在VS Code里,让一个cpp文件调用另一个cpp文件:
在开头加入#include “******.cpp”
在VS Code里,让一个cpp文件调用自定义.h文件:
在开头加入#include “******.h”
2.关于调用strcpy()函数时总是报错问题:
每次调用strcpy函数时在文件开头 加上#pragma warning(disable:4996)。此方法比较直接有效。
链接: https://blog.youkuaiyun.com/me_daijun/article/details/50739143
VS2017出现的问题 const char * 不能再给char *进行初始化:
只能用字符数组
链接: https://blog.youkuaiyun.com/qq_36955347/article/details/83038607
3.全局数据区:存放全局变量,静态本地变量,静态成员变量;
堆栈:存放本地变量;
堆:存放new出来的东西。
4.const和static的区别:
https://blog.youkuaiyun.com/freedom62/article/details/72821452
5.strlen与sizeof的区别与使用:
https://blog.youkuaiyun.com/a904235765/article/details/47419699
6.Synchronized(对象锁)和Static Synchronized(类锁)的区别:
https://blog.youkuaiyun.com/cs408/article/details/48930803
7.哈希表hashTable:(与hashMap比较)
https://blog.youkuaiyun.com/iva_brother/article/details/82253989
https://blog.youkuaiyun.com/yu849893679/article/details/81530298
8.vector(不是特别必要):
https://blog.youkuaiyun.com/fanyun_01/article/details/56842637
9.c++常用头文件
iostream 是输入输出流头文件 cin cout等都要用
带c的都是和c语言相关的,例如,加cstdio可以进行scanf和printf的使用,比cin,cout快
algorithm是算法的头文件,有一些算法相关的函数,max等
https://blog.youkuaiyun.com/THISISPAN/article/details/7470335
10.return; return 0; return -1; return 1;的区别:
1 return, 如果什么都不接的话,其实就是void类型函数的返回,返回后不再执行return后面的语句,如果函数执行成功返回0,不成功返回非0,一般情况下非0值常用-1来表示。
2 return 0:一般用在主函数结束时,表示程序正常终止,即告诉系统程序正常。
3 return -1::表示返回一个代数值,一般用在子函数结尾。表示程序异常终止,即告诉系统程序异常
4 return 1:与return -1相同。
11.C++中->的意思:(动态指针)
指向结构变量的指针
一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。通过结构指针即可访问该结构变量,这与数组指针和函数指针的情况是相同的。
结构指针变量说明的一般形式为:
struct 结构名 *结构指针变量名
#include<stdio.h>
struct stu // 定义一个结构体
{
char name[10]; // 姓名
int num; // 学号
int age; // 年龄
};
void main()
{
struct stu *s; // 定义一个结构体指针
char str[]="ZhangLi";
s->name = str; // 对结构体中的成员变量name进行赋值
s->num = 2015120; // 对结构体中的成员变量num进行赋值
s->age = 18; // 对结构体中的成员变量age进行赋值
}
12.nullptr与NULL区别:
https://blog.youkuaiyun.com/wmaoshu/article/details/50662332
13.指针和应用作为函数参数的区别
https://blog.youkuaiyun.com/wangdongwei0/article/details/85227864
下面的程序是可通过的(剑指offer)
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
if (pRootOfTree == nullptr) return nullptr;
TreeNode* res = pRootOfTree;//定义
TreeNode* pre = nullptr;//定义
change(res, pre);//调用函数
while (res->left)
res = res->left;
return res;
}
private:
void change(TreeNode* res, TreeNode*& pre)//此处函数的引入参数的格式,如果去掉&程序会报错
{
if (res == nullptr) return;
change(res->left, pre);
res->left = pre;
if (pre) pre->right = res;
pre = res;
change(res->right, pre);
}
};
一言以蔽之:如果想改变一般类型的参数的值,可以使用变量的指针做参数;如果想改变指针变量指向的地址就要用引用参数。
如果在子函数中我们改变指针p指向对象的值时,第一种和第二种都可以。但是如果我们要改变指针p指向对象的话,只有第二种可以实现。
因为如果不使用&,那么在函数中会自动调用指针的构造函数,构造一个临时指针,这个指针和传进来的指针指向同一个位置。我们可以通过这个临时指针改变该位置的数值,但是如果把临时指针指向另一个位置时,并不会改变传进来的指针指向的位置。
14、判断一棵二叉树是不是全二叉树:
https://blog.youkuaiyun.com/qq_40938077/article/details/80471997
创建队列在,暂存节点,依次判断。
15.STL中map的使用
https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html
map的基本操作函数:
C++ maps是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
16、C++中的迭代器iterator:
如vector::iterator ot;
string::iterator it;
https://blog.youkuaiyun.com/qq_35644234/article/details/52331948
17、sort函数的使用
#include
sort(numbers.begin(), numbers.end())
https://blog.youkuaiyun.com/yinjianxiang/article/details/73252176
18、字符串相关
https://blog.youkuaiyun.com/malele4th/article/details/79337968
19、c++的多态性
https://catonmat.net/cpp-polymorphism
20、条件编译(#ifdef)
https://blog.youkuaiyun.com/qq_33658067/article/details/79443014
21、L1正则化和L2正则化
https://blog.youkuaiyun.com/red_stone1/article/details/80755144
L1正则化:
因此更容易产生权重W为0的情况,为稀疏化的权重矩阵
L2正则化
更容易产生较小的权重,也就是 权重上限收到限制,权重一般都较小
22、五大常用算法
https://blog.youkuaiyun.com/qq_20309055/article/details/78877909