STL-常用算法 遍历/查找/排序/拷贝和替换/算数生成/集合算法

news2024/11/15 2:10:48

STL常用算法

常用的遍历算法

for_each

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>


void myPrint(int v)
{
	cout << v << "  ";
}

class MyPrint
{
public:
	void operator()(int v)
	{
		cout << v << "  ";
	}
};

void test01()
{
	vector<int> v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}

	// 普通函数遍历
	for_each(v.begin(),v.end(),myPrint);
	cout << endl;

	// 函数对象遍历
	for_each(v.begin(), v.end(), MyPrint());
	cout << endl;
}
int main()
{
	test01();
	system("pause");
	return 0;
}

transform

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>


class Transform
{
public:
	int operator()(int v)
	{
		return v + 100;
	}
};

class Print
{
public:
	void operator()(int v)
	{
		cout << v << "  ";
	}

};
void test01()
{
	vector<int> v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	
	vector<int> v2;//目标容器
	v2.resize(v.size());//提前开辟空间
	transform(v.begin(), v.end(), v2.begin(), Transform());
	for_each(v2.begin(), v2.end(), Print());
	cout << endl;
}
int main()
{
	test01();
	system("pause");
	return 0;
}

常用的查找算法

对于自定义数据类型,一般需要重载==号 operator==

find

自定义数据类型

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>

// 内置数据类型
void test01()
{
	vector<int> v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	vector<int>::iterator pos = find(v.begin(), v.end(), 5);
	if (pos == v.end())
	{
		cout << "没有找到" << endl;
	}
	else
	{
		cout << "找到了" << *pos << endl;
	}
}

class Person
{
public:
	bool operator==(Person p)
	{
		if (this->name == p.name && this->age == p.age)
		{
			return true;
		}
		return false;
	}
	Person(string name, int age)
	{
		this->name = name;
		this->age = age;
	}
	string name;
	int age;
};

// 自定义数据类型
void test02()
{
	vector<Person> v;
	v.push_back(Person("111",10));
	v.push_back(Person("222", 20));
	v.push_back(Person("333", 30));
	v.push_back(Person("444", 40));
	v.push_back(Person("555", 50));
	v.push_back(Person("666", 60));
	v.push_back(Person("777", 70));

	vector<Person>::iterator pos = find(v.begin(), v.end(), Person("222", 20));
	if (pos == v.end())
	{
		cout << "没有找到" << endl;
	}
	else
	{
		cout << "找到了" << endl
			<< "姓名:" << pos->name << "  年龄:" << pos->age << endl;
	}
}
int main()
{
	// test01();
	test02();
	system("pause");
	return 0;
}

find_if

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>

class GreaterFive
{
public:
	bool operator()(int v)
	{
		return v > 8;
	}
};
// 内置数据类型
void test01()
{
	vector<int> v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	vector<int>::iterator pos = find_if(v.begin(),v.end(), GreaterFive());
	if (pos == v.end())
	{
		cout << "没有找到" << endl;
	}
	else
	{
		cout << "找到了" << *pos << endl;
	}
}

class Person
{
public:
	Person() {};
	bool operator()(Person p)
	{
		return p.age > 50;
	}
	Person(string name, int age)
	{
		this->name = name;
		this->age = age;
	}
	string name;
	int age;
};

// 自定义数据类型
void test02()
{
	vector<Person> v;
	v.push_back(Person("111", 10));
	v.push_back(Person("222", 20));
	v.push_back(Person("333", 30));
	v.push_back(Person("444", 40));
	v.push_back(Person("555", 50));
	v.push_back(Person("666", 60));
	v.push_back(Person("777", 70));

	vector<Person>::iterator pos = find_if(v.begin(), v.end(), Person());
	if (pos == v.end())
	{
		cout << "没有找到" << endl;
	}
	else
	{
		cout << "找到了" << endl
			<< "姓名:" << pos->name << "  年龄:" << pos->age << endl;
	}
}
int main()
{
	// test01();
	test02();
	system("pause");
	return 0;
}

adjacent_find

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>

void test01()
{
	vector<int> v;
	v.push_back(0);
	v.push_back(1);
	v.push_back(2);
	v.push_back(1);
	v.push_back(3);
	v.push_back(5);
	v.push_back(5);
	v.push_back(0);
	vector<int>::iterator pos = adjacent_find(v.begin(), v.end());
	if (pos == v.end())
	{
		cout << "没有找到" << endl;
	}
	else
	{
		cout << "找到了" << *pos << endl;
	}
}
int main()
{
	test01();
	system("pause");
	return 0;
}

binary_search

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>

void test01()
{
	vector<int> v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	// 必须是有序的序列才能使用二分查找
	bool ret = binary_search(v.begin(), v.end(), 5);
	if (!ret)
	{
		cout << "没有找到" << endl;
	}
	else
	{
		cout << "找到了" <<endl;
	}
}
int main()
{
	test01();
	system("pause");
	return 0;
}

count

第三个参数中放的是统计的元素,自定义数据类型,元素内要放operator==

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>

// 内置数据类型
void test01()
{
	vector<int> v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	v.push_back(5);
	v.push_back(5);
	v.push_back(5);

	int ret = count(v.begin(), v.end(), 5);
	cout << ret << endl;
}

class Person
{
public:
	bool operator==(Person p)
	{
		return this->age == p.age;
	}
	//bool operator==(Person p)
	//{
	//	if (this->name == p.name && this->age == p.age)
	//	{
	//		return true;
	//	}
	//	return false;
	//}
	Person(string name, int age)
	{
		this->name = name;
		this->age = age;
	}
	string name;
	int age;
};


// 自定义数据类型
void test02()
{
	vector<Person> v;
	v.push_back(Person("111", 10));
	v.push_back(Person("222", 40));
	v.push_back(Person("333", 30));
	v.push_back(Person("444", 40));
	v.push_back(Person("555", 40));
	v.push_back(Person("666", 40));
	v.push_back(Person("777", 70));

	int ret = count(v.begin(), v.end(), Person("888",40));
	cout << ret << endl;
	
}
int main()
{
	// test01();
	test02();
	system("pause");
	return 0;
}

count_if

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>

class Greater5
{
public:
	bool operator()(int v)
	{
		return v > 5;
	}
};
// 内置数据类型
void test01()
{
	vector<int> v;
	for (int i = 0; i < 15; i++)
	{
		v.push_back(i);
	}
	v.push_back(5);
	v.push_back(5);
	v.push_back(5);

	cout << count_if(v.begin(), v.end(), Greater5()) << endl;
}

class Person
{
public:
	Person() {};
	bool operator()(Person p)
	{
		return p.age > 10;
	}
	bool operator==(Person p)
	{
		return this->age == p.age;
	}
	//bool operator==(Person p)
	//{
	//	if (this->name == p.name && this->age == p.age)
	//	{
	//		return true;
	//	}
	//	return false;
	//}
	Person(string name, int age)
	{
		this->name = name;
		this->age = age;
	}
	string name;
	int age;
};


// 自定义数据类型
void test02()
{
	vector<Person> v;
	v.push_back(Person("111", 10));
	v.push_back(Person("222", 40));
	v.push_back(Person("333", 30));
	v.push_back(Person("444", 40));
	v.push_back(Person("555", 40));
	v.push_back(Person("666", 40));
	v.push_back(Person("777", 70));

	int ret = count_if(v.begin(), v.end(), Person());
	cout << ret << endl;

}
int main()
{
	// test01();
	test02();
	system("pause");
	return 0;
}

常用排序算法

sort

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<functional>

void print(int v)
{
	cout << v << "  ";
}
void test01()
{
	vector<int> v;
	for (int i = 0; i < 15; i++)
	{
		v.push_back(i);
	}
	v.push_back(5);
	v.push_back(5);
	v.push_back(5);

	// 默认从大到小
	sort(v.begin(), v.end());
	for_each(v.begin(), v.end(), print);
	cout << endl;

	sort(v.begin(), v.end(),greater<int>());
	for_each(v.begin(), v.end(), print);
	cout << endl;
}
int main()
{
	test01();
	system("pause");
	return 0;
}

random_shuffle

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<functional>

void print(int v)
{
	cout << v << "  ";
}
void test01()
{
	vector<int> v;
	for (int i = 0; i < 15; i++)
	{
		v.push_back(i);
	}
	random_shuffle(v.begin(),v.end());
	for_each(v.begin(), v.end(), print);
	cout << endl;
}
int main()
{
	srand((unsigned int)time(NULL));
	test01();
	system("pause");
	return 0;
}

merge

自定义数据类型还没高明白

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>

void print(int v)
{
	cout << v << "  ";
}
// 内置数据类型
void test01()
{
	vector<int> v;
	vector<int> v2;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
		v2.push_back(i + 2);
	}
	vector<int> vTarget;
	vTarget.resize(v.size() + v2.size());

	// 合并后仍然是有序的
	merge(v.begin(), v.end(), v2.begin(), v2.end(), vTarget.begin());
	for_each(vTarget.begin(),vTarget.end(), print);
	cout << endl;
}

class Person
{
public:
	Person() {};

	bool operator<(const Person& p)const
	{
		return false;
	}

	bool operator==(Person p)
	{
		if (this->name == p.name && this->age == p.age)
		{
			return true;
		}
		return false;
	}
	Person(string name, int age)
	{
		this->name = name;
		this->age = age;
	}
	string name;
	int age;
};


//class Compare
//{
//public:
//	bool operator()(Person p1, Person p2)
//	{
//		return p1.age > p2.age;
//	}
//};
//void print2(Person p)
//{
//	cout << "姓名:\t" << p.name << "\t"
//		<< "年龄:" << p.age << endl;
//}
 自定义数据类型
//void test02()
//{
//	vector<Person> v;
//	v.push_back(Person("111", 20));
//	v.push_back(Person("222", 20));
//	v.push_back(Person("333", 30));
//	v.push_back(Person("444", 40));
//	v.push_back(Person("555", 50));
//	v.push_back(Person("666", 60));
//	v.push_back(Person("777", 70));
//	vector<Person> v2;
//	v2.push_back(Person("888", 30));
//	v2.push_back(Person("101", 40));
//	v2.push_back(Person("999", 90));
//
//	vector<Person> vTarget;
//	vTarget.resize(v.size()+v2.size());
//
//	merge(v.begin(), v.end(), v2.begin(), v2.end(), vTarget.begin(), Person());
//
//	for_each(vTarget.begin(), vTarget.end(), print2);
//	cout << endl;
//}
int main()
{
	test01();
	//test02();
	system("pause");
	return 0;
}

reverse

常用的拷贝和替换算法

copy

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
void print(int v)
{
	cout << v << "  ";
}
void test01()
{
	vector<int> v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	for_each(v.begin(), v.end(), print);
	cout << endl;

	vector<int> v2;
	v2.resize(v.size());
	copy(v.begin(),v.end(),v2.begin());
	for_each(v2.begin(), v2.end(), print);
	cout << endl;
}
int main()
{
	test01();
	system("pause");
	return 0;
}

replace

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

class Print
{
public:
	void operator()(int v)
	{
		cout << v << "  ";
	}
};
void test01()
{
	vector<int> v;
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(20);
	v.push_back(20);
	v.push_back(60);
	v.push_back(80);
	cout << "替换前" << endl;
	for_each(v.begin(),v.end(), Print());
	cout << endl;

	replace(v.begin(),v.end(),20,22);
	for_each(v.begin(), v.end(), Print());
	cout << endl;

}
int main()
{
	test01();
	system("pause");
	return 0;
}

replace_if

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

class Print
{
public:
	void operator()(int v)
	{
		cout << v << "  ";
	}
};

class greater30
{
public:
	bool operator()(int v)
	{
		return v >= 30;
	}
};
void test01()
{
	vector<int> v;
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(20);
	v.push_back(20);
	v.push_back(60);
	v.push_back(80);
	cout << "替换前" << endl;
	for_each(v.begin(), v.end(), Print());
	cout << endl;

	cout << "替换后" << endl;
	replace_if(v.begin(), v.end(), greater30(), 11);
	for_each(v.begin(), v.end(), Print());
	cout << endl;

}
int main()
{
	test01();
	system("pause");
	return 0;
}

swap

两个容器必须同一种类型

大小可以不一样

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

class Print
{
public:
	void operator()(int v)
	{
		cout << v << "  ";
	}
};

void test01()
{
	vector<int> v;
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(20);
	v.push_back(20);
	v.push_back(60);
	v.push_back(80);
	vector<int> v2;
	v2.push_back(111);
	cout << "替换前" << endl;
	for_each(v.begin(), v.end(), Print());
	cout << endl;
	for_each(v2.begin(), v2.end(), Print());
	cout << endl;

	cout << "替换后" << endl;
	swap(v, v2);
	for_each(v.begin(), v.end(), Print());
	cout << endl;
	for_each(v2.begin(), v2.end(), Print());
	cout << endl;

}
int main()
{
	test01();
	system("pause");
	return 0;
}

常用算数生成算法

numeric 英文 数字的

accumulate

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<numeric>
#include<string>


void test01()
{
	vector<int> v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}

	cout << accumulate(v.begin(), v.end(), 0) << endl;

}
int main()
{
	test01();
	system("pause");
	return 0;
}

对于自定义数据类型的应用

https://www.jb51.net/article/242034.htm

fill

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

class Print
{
public:
	void operator()(int v)
	{
		cout << v << "  ";
	}
};

void test01()
{
	vector<int> v;
	v.resize(10);
	for_each(v.begin(), v.end(), Print());
	cout << endl;

	fill(v.begin(), v.end(), 100);
	for_each(v.begin(), v.end(), Print());
	cout << endl;
}
int main()
{
	test01();
	system("pause");
	return 0;
}

常用的集合算法

set_intersection

返回交集的最后一个元素的下一个位置(我的是正确的,图片里是错误的)

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

class Print
{
public:
	void operator()(int v)
	{
		cout << v << "  ";
	}
};

void test01()
{
	vector<int> v;
	vector<int> v2;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
		v2.push_back(i + 5);
	}
	vector<int> v3;
	v3.resize(min(v.size(), v2.size()));
	vector<int>::iterator pos = set_intersection(v.begin(),v.end(),v2.begin(),v2.end(), v3.begin());

	// pos 指向最后一个元素的下一个位置
	cout << *pos << endl;
	for_each(v3.begin(), pos, Print());
	cout << endl;
}
int main()
{
	test01();
	system("pause");
	return 0;
}

ste_union

返回交集的最后一个元素的下一个位置(我的是正确的,图片里是错误的)

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

class Print
{
public:
	void operator()(int v)
	{
		cout << v << "  ";
	}
};

void test01()
{
	vector<int> v;
	vector<int> v2;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
		v2.push_back(i + 5);
	}
	vector<int> v3;
	v3.resize(v.size()+v2.size());
	vector<int>::iterator pos = set_union(v.begin(), v.end(), v2.begin(), v2.end(), v3.begin());

	// pos 指向最后一个元素的下一个位置
	cout << *pos << endl;
	for_each(v3.begin(), pos, Print());
	cout << endl;
}
int main()
{
	test01();
	system("pause");
	return 0;
}

set_difference

求谁的差集把谁的迭代器放前面

返回差集的最后一个元素的下一个位置(我的是正确的,图片里是错误的)

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

class Print
{
public:
	void operator()(int v)
	{
		cout << v << "  ";
	}
};

void test01()
{
	vector<int> v;
	vector<int> v2;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
		v2.push_back(i + 5);
	}
	vector<int> v3;
	v3.resize(max(v.size(),v2.size()));
	vector<int>::iterator pos = set_difference(v.begin(), v.end(), v2.begin(), v2.end(), v3.begin());

	// pos 指向最后一个元素的下一个位置
	// cout << *pos << endl;

	cout << "v的差集为:" << endl;
	for_each(v3.begin(), pos, Print());
	cout << endl;

	vector<int>::iterator pos2 = set_difference(v2.begin(), v2.end(), v.begin(), v.end(), v3.begin());
	cout << "v2的差集为:" << endl;
	for_each(v3.begin(), pos2, Print());
	cout << endl;

}

int main()
{
	test01();
	system("pause");
	return 0;
}

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

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

相关文章

React学习笔记(三)——React 组件通讯

1. 组件通讯-概念 了解组件通讯的意义 大致步骤&#xff1a; 知道组件的特点知道组件通讯意义 具体内容&#xff1a; 组件的特点 组件是独立且封闭的单元&#xff0c;默认情况下&#xff0c;只能使用组件自己的数据在组件化过程中&#xff0c;通常会将一个完整的功能拆分成多…

cesium.js 入门到精通(5-2)

在cesium 的配置中 有一些参数 可以配置地图的显示 显示出 水的动态显示 山的效果 相当于一些动画显示的效果 var viewer new Cesium.Viewer("cesiumContainer", {infoBox: false,terrainProvider: await Cesium.createWorldTerrainAsync({requestWaterMask: tru…

【计算机网络】计算机网络基础二

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 以太网的通信原理令牌环网的通信原理网络传输基本流程 数据包封装和分用 网络传输流程图 局域网通信&#xff08;同一个网段内的两台…

PY+MySQL(等先完成mysql的学习)

第一章&#xff1a;准备工作&#xff08;重点关于mysql&#xff09; win安装 下载&#xff1a; 网址&#xff1a;MySQL :: Download MySQL Community Server版本&#xff1a;我的是8.0&#xff0c;但是建议5.7 下载&#xff1a;安装&#xff0c;因为是zip文件所以直接解压就好了…

股价预测,非线性注意力更佳?

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 本文探讨了在 transformer 模型中使用非线性注意力来预测股票价格的概念。我们讨论了黎曼空间和希尔伯特空间等非线性空间的数学基础,解释了为什么非线性建模可能是有利的,并提供了在代码中实现这种…

MySQL 主从复制部署与优化

文章目录 前言 在现代数据库管理中&#xff0c;MySQL 主从复制是一种关键技术&#xff0c;用于提高数据的可用性和性能。随着 Docker 容器技术的普及&#xff0c;利用 Docker 搭建 MySQL 主从复制环境已成为一种趋势&#xff0c;它提供了一种简便、高效且可扩展的解决方案。本…

828华为云征文|Flexus X实例Docker+Jenkins+gitee实现CI/CD自动化部署-解放你的双手~

目录 前言 实验步骤 环境准备 安装Portainer 拉取镜像 更换镜像源 启动容器 安装jenkins 拉取镜像 获取管理员密码 新建流水线项目 Portainer配置 gitee配置WebHooks 构建 修改代码&#xff0c;自动部署 前言 &#x1f680; 828 B2B企业节特惠来袭&#xff0c;…

Hadoop 常用生态组件

Hadoop核心组件 安装 Hadoop 时&#xff0c;通常会自动包含以下几个关键核心组件&#xff0c;特别是如果使用了完整的 Hadoop 发行版&#xff08;如 Apache Hadoop、Cloudera 或 Hortonworks 等&#xff09;。这些组件构成了 Hadoop 的核心&#xff1a; 1. HDFS&#xff08;H…

数据篇| 关于Selenium反爬杂谈

友情提示:本章节只做相关技术讨论, 爬虫触犯法律责任与作者无关。 LLM虽然如火如荼进行着, 但是没有数据支撑, 都是纸上谈兵, 人工智能的三辆马车:算法-数据-算力,缺一不可。之前写过关于LLM微调文章《微调入门篇:大模型微调的理论学习》、《微调实操一: 增量预训练(Pretrai…

选择五金车床精密加工厂的五大要点

在五金制造行业&#xff0c;五金车床精密加工是生产高品质零部件的关键环节。随着市场需求的日益多样化和对产品质量要求的不断提高&#xff0c;选择一家合适的五金车床精密加工厂变得至关重要。然而&#xff0c;面对众多的加工厂&#xff0c;如何做出正确的选择却是一个难题。…

光耦知识分享 | 晶体管光耦与可控硅光耦的区别

晶体管光耦和可控硅光耦是两种常见的光电耦合器件&#xff0c;它们在电子电路中扮演着重要的角色。下面将介绍晶体管光耦和可控硅光耦的区别以及它们的主要应用。 结构区别 晶体管光耦通常由一个发光二极管&#xff08;LED&#xff09;和一个光敏晶体管&#xff08;光控晶体管…

微信小程序. tarojs webView的 onload 事件不触发

功能需求&#xff1a;想再webView加载成功后做一些逻辑操作。使用onLoad事件 现象&#xff1a;在taro里面webView的onload。onError 事件不触发了 版本&#xff1a;taro 3.6版本 分析&#xff1a;刚开始想着可能是版本&#xff0c;然后用另外一个项目&#xff08;taro 3.4版…

PS教程,从零开始学PS

A01 进入PS的世界 广告设计\平面设计产品包装设计摄影后期图像美化\照片美化网页网店UI界面设计游戏美术动漫图形创意恶意创意\动态表情效果图后期调整 了解基本规律掌握操作规律开发扩展思维 A02 PS软件安装 获得PS安装程序安装PS启动PS A03 认识界面 1. PS主界面构成 …

读构建可扩展分布式系统:方法与实践10最终一致性

1. 最终一致性 1.1. 在一些应用领域&#xff0c;通常谈论的是银行和金融行业&#xff0c;最终一致性根本不合适 1.2. 事实上&#xff0c;最终一致性在银行业已经使用了很多年 1.2.1. 支票需要几天时间才能在你的账户上进行核对&#xff0c;而且你可以轻松地开出比账户余额多的…

前端vue-子组件对于父组件的传值的约束

组件中可以传字符串&#xff0c;布尔值&#xff0c;数组&#xff0c;对象&#xff0c;函数 如果子组件对于父组件传来的值进行校验&#xff0c;那么我们把子组件中的props中的数据写成{}的形式 &#xff0c;在里面进行数据的约束 required&#xff1a;是必须要传值&#xff0c;…

使用Renesas R7FA8D1BH (Cortex®-M85)实现多功能UI

目录 概述 1 系统框架介绍 1.1 模块功能介绍 1.2 UI页面功能 2 软件框架结构实现 2.1 软件框架图 2.1.1 应用层API 2.1.2 硬件驱动层 2.1.3 MCU底层驱动 2.2 软件流程图 4 软件功能实现 4.1 状态机功能核心代码 4.2 页面功能函数 4.3 源代码文件 5 功能测试 5.1…

【渐冻勇士的营养秘籍!这些营养素让爱更坚强】

Hey小伙伴们~&#x1f44b; 今天我们来聊聊一个温暖而坚强的话题——渐冻症患者的营养补充攻略&#xff01;&#x1f4aa; 在这个充满挑战的路上&#xff0c;合理的营养摄入就像是他们最坚实的盔甲&#xff0c;让爱与希望的光芒更加耀眼。✨ &#x1f308; ‌蛋白质&#xff1…

macOS平台(intel)编译MAVSDK安卓平台SO库

1.下载MAVSDK: git clone https://github.com/mavlink/MAVSDK.git --recursive 2.编译liblzma 修改CMakeLists.txt文件增加C与CXX指令-fPIC set(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}") set(CMAKE_CXX_FLAGS "-fPIC ${CMAKE_CXX_FLAGS}") 修改如下:…

k8s下的网络通信与调度

目录 一、k8s网络通信 1、k8s通信整体架构 2、flannel网络插件 &#xff08;1&#xff09;flannel跨主机通信原理 &#xff08;2&#xff09;flannel支持的后端模式 3、calico网络插件 &#xff08;1&#xff09;简介 &#xff08;2&#xff09;网络架构 &#xff08;…

Maven 替换国内的镜像源

Maven 替换国内的镜像源 在使用 Maven 构建项目时&#xff0c;Maven 会从中央仓库中下载依赖。但由于网络环境的限制&#xff0c;访问 Maven 中央仓库的速度可能较慢。为了加快依赖下载速度&#xff0c;尤其是在大陆地区&#xff0c;建议将 Maven 默认的中央仓库替换为国内的镜…