【stl -- 常用算法】

news2024/11/28 13:53:55

目录:

  • 前言
  • 一、遍历算法
    • for_each、transform
  • 二、查找、统计算法
    • find、find_if
    • adjacent_find
    • binary_search
    • count、count_if
  • 三、排序算法
    • sort
    • random_shuffle
    • merge
    • reverse
  • 拷贝、替换算法
    • copy
    • replace、replace_if
    • swap
  • 算数生成算法
    • accumulate
    • fill
  • 集合算法
    • set_intersection
    • set_union
    • set_difference

前言

打怪升级:第19天
在这里插入图片描述

在学习这些算法是我们需要了解一些头文件:< algorithm > 、< numeric > 和 < functional >
< algorithm > 是stl头文件中最大的一个,包含下方介绍的绝大多数算法
< numeric > 体积很小,只包含几个在序列上进行简单数学运算模板函数
< functional >定义了一些模板类、用以声明函数对象。


一、遍历算法

在这里插入图片描述

for_each、transform

这里是引用

class Form
{
public:
	int operator()(int& v)
	{
		return v + 1000; //  这里我们可以进行各种操作
	}
}; 

void Print(int v)
{
	cout << v << ' ';
}

void test04()
{
	vector<int>v1;
	for (int i = 0; i < 8; ++i)
	{
		v1.push_back(i);
	}
	vector<int>v2;
	v2.resize(v1.size());   //  改变大小,空位默认用 0 填充
	// v2.reserve(v1.size());   reserve是预开辟空间,但是实际大小还是0,
	// 而我们使用transform时需要有足够的空间来存放搬运过来的数据, 因此这里不可以使用 

	transform(v1.begin(), v1.end(), v2.begin(), Form());  //  Form()  为仿函数、也可以直接使用函数
	for_each(v1.begin(), v1.end(), Print);  //  Print   为函数指针、也可以使用仿函数
	cout << endl;
	for_each(v2.begin(), v2.end(), Print);
	cout << endl;
}

运行实例:
在这里插入图片描述


二、查找、统计算法

在这里插入图片描述

find、find_if

在这里插入图片描述

class Greater
{
public:
	bool operator()(int val)  // 谓词就是用来做判断的
	{
		return val > 650;
	}
};

void Print(int val)
{
	cout << val << ' ';
}

void test05()
{
	vector<int>v;
	for (int i = 0; i < 10; ++i)
	{
		v.push_back(rand() % 100 + 600);
	}
	for_each(v.begin(), v.end(), Print);
	cout << endl;

	vector<int>::iterator it = find(v.begin(), v.end(), 600);  // 查找数字600
	if (it != v.end())
	{
		cout << *it << endl;
	}
	else
	{
		cout << "did not find" << endl;
	}

	it = find_if(v.begin(), v.end(), Greater()); //  查找有没有大于650的数字
	if (it != v.end())
	{
		cout << *it << endl;
	}
	else
	{
		cout << "did not find" << endl;
	}

}

运行实例:
在这里插入图片描述

find -> 自定义数据类型 – 示例:

class Person
{
public:
	Person(string name, int age)
	{
		this->name = name;
		this->age = age;
	}

	bool operator==(Person p)  // 重载==,告诉编译器查找的规则
	{
		if (this->name == p.name && this->age == p.age)
			return true;
		else
			return false;
	}
	string name;
	int age;
};

void test06()
{
	vector<Person>v1;
	Person p1("小米粒", 20);
	v1.push_back(p1);
	Person p2("陈暖树", 20);
	v1.push_back(p2);
	Person p3("裴钱", 22);
	v1.push_back(p3);
	Person p4("李宝瓶", 24);
	v1.push_back(p4);
	Person p5("李宝瓶", 24);

	vector<Person>::iterator it = find(v1.begin(), v1.end(), p5);
	if (it != v1.end())
	{
		cout << "name->" << it->name << " age->" << it->age << endl;
	}
	else
	{
		cout << "did not find" << endl;
	}
}

运行实例:
在这里插入图片描述


adjacent_find

在这里插入图片描述

void PrintVector(int val)
{
	cout << val << ' ';
}

void test01()
{
	vector<int>v1;
	vector<int>v2;
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(i);
		v2.push_back(rand() % 3);
	}

	cout << "v1: ";
	for_each(v1.begin(), v1.end(), PrintVector);
	cout << endl;
	cout << "v2: ";
	for_each(v2.begin(), v2.end(), PrintVector);
	cout << endl;

	//  查找连续相同的第一组数据
	vector<int>::iterator vit = adjacent_find(v1.begin(), v1.end()); // 查v1容器
	if (vit != v1.end())
	{
		cout << "adjacent data is : " << *vit << endl;
	}
	else
	{
		cout << "did not find" << endl;
	}
	vit = adjacent_find(v2.begin(), v2.end());  // 查v2容器
	if (vit != v2.end())
	{
		cout << "adjacent data is : " << *vit << endl;
	}
	else
	{
		cout << "did not find" << endl;
	}
}

示例:在这里插入图片描述


binary_search

在这里插入图片描述

void Print(int val)
{
	cout << val << ' ';
}

void test02()
{
	vector<int>v1;
	set<int>s1;
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(rand() % 100);
		s1.insert(rand() % 100);
	}

	//  binary_search 必须在有序容器中进行查找
	sort(v1.begin(), v1.end(), greater<int>()); // 排降序
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;
	for_each(s1.begin(), s1.end(), Print);
	cout << endl;

	bool target = binary_search(v1.begin(), v1.end(), 30);
	if (target)
	{
		cout << "30存在" << endl;
	}
	else
	{
		cout << "30不存在" << endl;
	}
	target = binary_search(s1.begin(), s1.end(), 30);
	if (target)
	{
		cout << "30存在" << endl;
	}
	else
	{
		cout << "30不存在" << endl;
	}
}

示例:在这里插入图片描述


count、count_if

在这里插入图片描述
count 示例:

class Person
{
public:
	Person(string name, int age)
	{
		this->m_name = name;
		this->m_age = age;
	}

	bool operator==(const Person& p)
	{
		return this->m_name == p.m_name && this->m_age == p.m_age;
	}

	string m_name;
	int m_age;
};

void test01()
{
	vector<int>v1;
	for (int i = 0; i < 100; ++i)  //  100 个 0~9之间的数字
	{
		v1.push_back(rand() % 10);
	}
	
	/* bool found = binary_search(v1.begin(), v1.end(), 5); // 二分查找 只适用于 有序序列
	if (found)
	{
		cout << "find it" << endl;
	}
	else
	{
		cout << "did not find" << endl;
	}*/

	cout << "9 is count->" << count(v1.begin(), v1.end(), 9) << endl;  //  统计 9 的个数

	vector<Person>v2;
	Person p1("aaa", 19);
	v2.push_back(p1);
	Person p2("bbb", 12);
	v2.push_back(p2);
	Person p3("ccc", 14);
	v2.push_back(p3);
	Person p4("ddd", 16);
	v2.push_back(p4);
	Person p5("ccc", 14);
	v2.push_back(p5);

	Person tmp("ccc", 14);

	int found = count(v2.begin(), v2.end(), tmp); //对于自定义类型,需要重载== ,来告诉编译器相等的条件
	cout << "count elements thit match val-> " << found << endl;

}

运行实例:
在这里插入图片描述

三、排序算法

在这里插入图片描述

sort

顺序:默认排升序,使用非常广泛。在这里插入图片描述

void Print(int v)
{
	cout << v << ' ';
}

void test03()
{
	vector<int>v1;
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(rand() % 100);
	}

	cout << "初始数据:";
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;

	cout << "升序排列:";
	sort(v1.begin(), v1.end());
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;

	cout << "降序排列:";
	sort(v1.begin(), v1.end(), greater<int>());  //  此处使用内建函数对象
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;
}

运行实例:
在这里插入图片描述

random_shuffle

洗牌:对区间内数据进行重新排列;
使用场景:抽签、随机取号等。
在这里插入图片描述

void Init(vector<int>&v, int val)
{
	for (int i = 0; i < 10; ++i)
	{
		v.push_back(i + val);
	}
}

void Print(int v)
{
	cout << v << ' ';
}

void test02()
{
	srand((unsigned int)time(NULL));
	
	vector<int>v1;
	Init(v1, 10);
	
	cout << "random_shuffle: ";
	random_shuffle(v1.begin(), v1.end());   //  洗牌1
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;
	
	cout << "random_shuffle: ";
	random_shuffle(v1.begin(), v1.end());   //  洗牌2
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;
	
	cout << "random_shuffle: ";
	random_shuffle(v1.begin(), v1.end());   //  洗牌3
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;
}

运行实例:
在这里插入图片描述


merge

合并:将两个有序容器中的数据进行合并,并把合并后的数据放到目标容器中,
这里需要注意:目标容器需要提前开辟好足够的空间。
在这里插入图片描述

void Print(int v)
{
	cout << v << ' ';
}

void test04()
{
	vector<int>v1;
	vector<int>v2;
	for (int i = 0; i < 8; ++i)
	{
		v1.push_back(i);
		v2.push_back(i + 5);
	}
	cout << "v1-> ";
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;
	cout << "v2-> ";
	for_each(v2.begin(), v2.end(), Print);
	cout << endl;

	vector<int>vtarget; // 目标容器
	vtarget.resize(v1.size() + v2.size());
	merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vtarget.begin());
	cout << "vtarget-> ";
	for_each(vtarget.begin(), vtarget.end(), Print);
	cout << endl;
}

运行实例:
在这里插入图片描述


reverse

反转:reverse,将容器内的数据进行反转。
在这里插入图片描述

void Print(int val)
{
	cout << val << ' ';
}

void test03()
{
	vector<int>v1;
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(rand() % 10);
	}
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;

	cout << "反转: ";
	reverse(v1.begin(), v1.end());
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;

	cout << "排序: ";
	sort(v1.begin(), v1.end());
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;

	cout << "反转: ";
	reverse(v1.begin(), v1.end());  // 对有序数据进行反转,相当于排反序
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;
}

运行实例:在这里插入图片描述


拷贝、替换算法

在这里插入图片描述

copy

示例:

void Print(int v)
{
	cout << v << ' ';
}

//  拷贝和替换函数
void test08()
{
	// copy
	vector<int>v1;
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(i);
	}

	//vector<int>v2;
	//v2.resize(v1.size());  //  不要忘记分配大小
	 将v1容器完全拷贝到v2,其实如果只是这样的操作,不如直接使用拷贝构造或者赋值operator=
	//copy(v1.begin(), v1.end(), v2.begin());
	// vector<int>v2(v1);  或者   v2 = v1;
	

	 //  copy更常用的是:将一个容器到一部分内容进行拷贝

	cout << "v1: ";
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;
	//  将v1的前半部分数据拷贝到v2
	vector<int>v2;
	v2.resize(v1.size() / 2);
	copy(v1.begin(), v1.end() - v1.size() / 2, v2.begin());
	cout << "v2: ";
	for_each(v2.begin(), v2.end(), Print);
	cout << endl;

}

运行实例:
在这里插入图片描述


replace、replace_if

在这里插入图片描述

void Print(int val)
{
	cout << val << ' ';
}
// 拷贝和替换算法
// replace
// replace_if

bool GreaterTow(int val)
{
	return val > 2;
}

void test01()
{
	vector<int>v1;
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(rand() % 5);
	}
	vector<int>v2(v1);
	cout << "替换前:";
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;
	
	cout << "替换后:";
	replace(v1.begin(), v1.end(), 0, 1000);  //  将 0 全部替换成 1000
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;

	cout << "按条件替换:";
	replace_if(v2.begin(), v2.end(), GreaterTow, 2);  // 将 大于 2 的全部替换成 2
	for_each(v2.begin(), v2.end(), Print);
	cout << endl;
}

运行实例:
在这里插入图片描述


swap

在这里插入图片描述

bool GreaterTow(int val)
{
	return val > 2;
}

void test02()
{
	vector<int>v1;
	vector<int>v2;
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(i);
	}
	for (int i = 0; i < 6; ++i)
	{
		v2.push_back(i + 100);
	}

	cout << "交换前:" << endl;
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;
	for_each(v2.begin(), v2.end(), Print);
	cout << endl;
	cout << "v1: " << v1.size() << ' ' << v1.capacity() << endl;
	cout << "v2: " << v2.size() << ' ' << v2.capacity() << endl;

	cout << "交换后:" << endl;
	swap(v1, v2);  //  直接传两个容器
	               //  vector中也内置了swap函数模板,因此也可以写成: v1.swap(v2);
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;
	for_each(v2.begin(), v2.end(), Print);
	cout << endl;
	cout << "v1: " << v1.size() << ' ' << v1.capacity() << endl;
	cout << "v2: " << v2.size() << ' ' << v2.capacity() << endl;
}

运行实例:
在这里插入图片描述


算数生成算法

在这里插入图片描述

accumulate

在这里插入图片描述

void test03()
{
	//  accumulate  -- 求和
	vector<int>v1;
	for (int i = 0; i <= 100; ++i)
	{
		v1.push_back(i);
	}
	//											0 为初始累加值
	int total = accumulate(v1.begin(), v1.end(), 0);
	cout <<  total << endl;

	

int cnt = accumulate(v1.begin(), v1.end(), 1000);
	cout << cnt << endl;

}

运行实例:
在这里插入图片描述


fill

在这里插入图片描述

void Print(int val)
{
	cout << val << ' ';
}

void test05()
{
	// fill  -- 填充
	// 对于填充区间,我们既可以在使用 resize 扩大空间的同时设置填充数据,也可以后期使用 fill 更改填充数据

	vector<int>v1;
	cout << "申请空间,并初始化为100" << endl;
	v1.resize(10, 100); //  第二个参数默认为0,此时我们改为100
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;

	cout << "将后半部分的数值改为520" << endl;
	fill(v1.begin() + v1.size() / 2, v1.end(), 520);
	for_each(v1.begin(), v1.end(), Print);
	cout << endl;
}

运行实例:
在这里插入图片描述


集合算法

集合算法的 ‘集合’ 指的是两个容器里的数据需要是有序的,并非限制只有set容器的数据才可以使用。
注意:交集和并集:a与b的交集,a与b的交集,因此a与b和b与a结果都是一样的,
但是差集不一样,a相对于b的差集,和b相对于a的差集,可能会得到两个结果,下面我们通过实践来验证。
在这里插入图片描述

set_intersection

在这里插入图片描述

void Print(int val)
{
	cout << val << ' ';
}

void test06()
{
	vector<int>v1;
	vector<int>v2;
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(i);         //  0 ~ 9
		v2.push_back(i + 5);     //  5 ~ 14
	}

	vector<int>vTarget;
	vTarget.resize(min(v1.size(), v2.size()));  // 一个集合包含于另一个集合时size最大
	vector<int>::iterator intEnd = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin()); 
	for_each(vTarget.begin(), intEnd, Print);   //  intEnd 不一定等于 end()
	cout << endl;
	for_each(vTarget.begin(), vTarget.end(), Print);
	cout << endl;
}

运行实例:在这里插入图片描述

set_union

在这里插入图片描述

void Print(int val)
{
	cout << val << ' ';
}

void test07()
{
	vector<int>v1;
	vector<int>v2;
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(i);         //  0 ~ 9
		v2.push_back(i + 5);     //  5 ~ 14
	}

	vector<int>vTarget;
	vTarget.resize(v1.size() + v2.size());  // 两个集合交集为空时最大
	vector<int>::iterator intEnd = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());
	for_each(vTarget.begin(), intEnd, Print);
	cout << endl;
	for_each(vTarget.begin(), vTarget.end(), Print);
	cout << endl;
}

运行实例:
在这里插入图片描述

set_difference

注意:a相对b的差集、b相对于a的差集。
在这里插入图片描述

void Print(int val)
{
	cout << val << ' ';
}

void test08()
{
	vector<int>v1;
	vector<int>v2;
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(i);         //  0 ~ 9
		v2.push_back(i + 5);     //  5 ~ 14
	}

	vector<int>vTarget1;
	cout << "v1 相对于 v2的差集:" << endl;
	vTarget1.resize(v1.size());  // 两个集合完全不同时最大			
	vector<int>::iterator intEnd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget1.begin());
	for_each(vTarget1.begin(), intEnd, Print);
	cout << endl;
	for_each(vTarget1.begin(), vTarget1.end(), Print);
	cout << endl;

	vector<int>vTarget2;
	cout << "v2 相对于 v1的差集:" << endl;
	vTarget2.resize(v2.size());  // 两个集合完全不同时最大			
	intEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget2.begin());
	for_each(vTarget2.begin(), intEnd, Print);
	cout << endl;
	for_each(vTarget2.begin(), vTarget2.end(), Print);
	cout << endl;
}

运行实例:
在这里插入图片描述


以上内容为看过黑马c++后的知识总结,如果有什么疑问或者建议都可以在评论区留言,感谢大家对在这里插入图片描述的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Day10 @Import整合第三方框架原理

1 前言Spring与MyBatis注解方式整合有个重要的技术点就是lmport&#xff0c;第三方框架与Spring整合xml方式很多是凭借自定义标签完成的&#xff0c;而第三方框架与Spring整合注解方式很多是靠import注解完成的。然后Import可以导入如下三种类&#xff1a;普通的配置类&#xf…

【蓝桥杯】历届真题 画廊(决赛)Java

【资源限制】 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 【问题描述】 小蓝办了一个画展&#xff0c;在一个画廊左右两边陈列了他自己的作品。为了使画展更有意思&#xff0c;小…

英语学习打卡day6

2023.1.26 1.promiscuous adj.混杂的&#xff1b;杂乱的&#xff1b;滥交的 pro&#xff08;往前&#xff09;misc(mix)&#xff1a;在混乱上勇往直前 2.susceptible adj.易受影响(或伤害等);敏感;过敏;感情丰富的;善感的 accept(抓)接受 be susceptible to对…敏感 She isn…

【数据结构】7.3 树表的查找

文章目录7.3.1 二叉排序树1. 二叉排序树的定义2. 二叉排序树的查找二叉排序树算法二叉排序树算法分析3. 二叉排序树的插入4. 二叉排序树的生成5. 二叉排序树的删除7.3.2 平衡二叉树1. 平衡二叉树的定义2. 平衡二叉树的平衡调整方法LL型调整RR型调整LR型调整RL型调整3. 构造平衡…

C#手动操作DataGridView之------使用各种数据源填充表格实例

C#中的表格控件只有一个&#xff0c;那就是datagridview&#xff0c;不像QT中可以用QTableview&#xff0c;QTableWidget。新手拿到datagridview的第一个问题就是数据从哪里来&#xff1f;难道从设计器中一个个手动输入&#xff0c;到时候要变怎办&#xff1f;所以&#xff0c;…

Python3 PIL处理任意尺寸图片为1920*1080 图片模糊 虚化 图片合并居中叠加

各位好&#xff0c;我是宋哈哈&#xff0c;很久没更新文章了&#xff0c;其实这篇代码是我在年前已经写好了。代码呢&#xff0c;也比较冷门适合人很少。仅仅对会AE , PR 视频剪辑&#xff0c; 又要会 python 的人&#xff0c;而且在公司领导又要你来做相册视频&#xff0c;在公…

MSBuild 命令行编译Delphi

为了构建项目&#xff0c;IDE现在使用MSBuild而不是以前的内部生成系统。IDE中的build、compile和make命令调用Microsoft的新生成引擎&#xff1a;MSBuild&#xff0c;它提供了全面的依赖性检查。MSBuild项目文件基于XML&#xff0c;包含描述项目的特定项、属性、任务和目标的部…

[GWCTF 2019]枯燥的抽奖

目录 信息收集 知识回顾 解题思路 信息收集 查看源码&#xff0c;发现check.php <?php #这不是抽奖程序的源代码&#xff01;不许看&#xff01; header("Content-Type: text/html;charsetutf-8"); session_start(); if(!isset($_SESSION[seed])){ $_SESSIO…

html表格

1.基本标签 标签名说明table表示整体&#xff0c;用于包裹多个trtr表格每行&#xff0c;用于包裹tdtd表格单元格&#xff0c;用于包裹内容 注意点&#xff1a; 表格嵌套关系&#xff1a;table>tr>td 表格table的常见属性&#xff1a; 修饰table属性的标签 需要写道tab…

【FA-GAN:超分辨率MRI图像】

FA-GAN: Fused attentive generative adversarial networks for MRI image super-resolution &#xff08;FA-GAN&#xff1a;融合注意生成对抗网络的MRI图像超分辨率&#xff09; 高分辨率磁共振图像可以提供细粒度的解剖信息&#xff0c;但是获取这样的数据需要长的扫描时间…

UVA11426 - GCD - Extreme (II)(数论,欧拉函数)

题目链接&#xff1a;GCD - Extreme (II) - UVA 11426 - Virtual Judge (vjudge.net)​​​​​ 题意 给一个数N&#xff0c;求&#xff1a; ​​​​​​​ 其中&#xff0c;多组输入&#xff0c;输入以0结束&#xff0c;保证答案在long long范围内。 思路 很好的一道题…

移动web主轴设置和flex总结

移动web主轴设置和flex总结设置主轴方向修改主轴经常的使用场景&#xff1a;弹性盒子换行设置侧轴对齐方式flex 总结梳理主轴排列方式侧轴对齐方式-单行对齐侧轴对齐方式-多行弹性盒子换行设置主轴方向伸缩比设置主轴方向 主轴默认是水平方向, 侧轴默认是垂直方向 修改主轴方…

Linux常用命令——semanage命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) semanage 默认目录的安全上下文查询与修改 补充说明 semanage命令是用来查询与修改SELinux默认目录的安全上下文。SELinux的策略与规则管理相关命令&#xff1a;seinfo命令、sesearch命令、getsebool命令、set…

天地图矢量注记图坑

http://lbs.tianditu.gov.cn/server/MapService.html瓦片图案例见下文&#xff0c;注意其中的LAYER:&#xff0c;记住口诀&#xff0c;地址里用什么&#xff0c;这个layer就用什么。比如影像注记里&#xff0c;地址用了cia_w&#xff0c;那么这个layer后面必须是cia_w&#xff…

别总写代码,这130个网站比涨工资都重要

今天推荐一些学习资源给大家&#xff0c;当然大家可以留言评论自己发现的优秀资源地址 搞学习 找书籍 冷知识 / 黑科技 写代码 资源搜索 小工具 导航页&#xff08;工具集&#xff09; 看视频 学设计 搞文档 找图片 搞学习 TED&#xff08;最优质的演讲&#xff09;&#xff1…

解析JVM类加载器

文章目录1、何为类加载器2、三层类加载器3、双亲委派模型参考资料&#xff1a;《深入理解Java虚拟机》 1、何为类加载器 类加载过程中&#xff0c;加载阶段第一步操作就是通过一个类的全限定名获取此类的二进制字节流。实现这个动作的代码就是类加载器。 任意一个类都必须由加…

mybatis-plus1(前言技术)

目录 一、Mybatis-plus入门 1.什么是mybatis-plus 2.初体验 ① 准备数据库脚本 ② 初始化工程 ③ 编码 ④ 开始使用 3.日志 二、Mybatis-plus主键生成策略 1.更新 三、Mybatis-plus自动填充 1&#xff1a;通过数据库完成自动填充 2&#xff1a;使用程序完成自…

gensim中的word2vec使用

介绍 一句话&#xff0c;GensimGensimGensim中的word2vec类就是用来训练词向量的&#xff0c;这个类实现了词向量训练的两种基本模型skip−gramskip-gramskip−gram和CBOWCBOWCBOW,可以通过后面的参数设置来选择&#xff0c;。但是&#xff0c;在Gensim这个模块中训练词向量的…

什么是盒子模型?

什么是盒子模型&#xff1f; 盒子模型组成有 4 部分,分别为:内容 内边距 外边距(一般不计入盒子实际宽度) 边框 盒子模型有 2 种:标准盒子模型与怪异盒子模型 标准盒子模型content(内容)border(边框)padding(内边距) 怪异盒子模型content(内容)(已经包含了 padding 和 border) …

随手查——Lumerical

Lumerical小白学习的一些记录&#xff0c;以防自己忘记&#xff0c;持续更。。。 快速导航1、如何设置网格2、关于窗口的一些操作&#xff08;1&#xff09;窗口的最大化与复原&#xff08;2&#xff09;窗口的关闭与开启1、如何设置网格 【View】→【Drawing grid】→【Edit …