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

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.xdnf.cn/news/1540761.html

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

相关文章

切换到WDDM模式,Tesla M4可以用于本地显示输出了!

正文共&#xff1a;1333 字 21 图&#xff0c;预估阅读时间&#xff1a;2 分钟 上次安装完Tesla M4显卡之后&#xff08;HPE服务器通过显卡直通安装Tesla M4&#xff0c;这算亮机成功了吗&#xff1f;&#xff09;&#xff0c;系统识别正常&#xff0c;但是不能用于显示&#x…

C语言的文件基础知识

一、文件存在的意义 ① 文件的定义是什么&#xff1f; 文件是以单个名称在计算机上存储的信息集合。文件可以是文本文档、图片、程序等等。文件通常具有三个字母的文件扩展名&#xff0c;用于指示文件类型&#xff08;例如&#xff0c;图片文件常常以 JPEG 格式保存并且文件扩…

Hive企业级调优[4]——HQL语法优化之分组聚合优化

HQL语法优化之分组聚合优化 优化说明 在 Hive 中&#xff0c;未经优化的分组聚合通常通过一个 MapReduce Job 实现。Map 端负责读取数据&#xff0c;并按分组字段进行分区&#xff0c;通过 Shuffle 将数据发送至 Reduce 端&#xff0c;在 Reduce 端完成最终的聚合运算。 Hiv…

网页交互模拟:模拟用户输入、点击、选择、滚动等交互操作

目录 一、理论基础 1.1 网页交互模拟的重要性 1.2 网页交互的基本原理 二、常用工具介绍 2.1 Selenium 2.2 Puppeteer 2.3 Cypress 2.4 TestCafe 三、实战案例 3.1 模拟用户输入 3.2 模拟用户点击 3.3 模拟用户选择 3.4 模拟滚动操作 四、最佳实践与优化 4.1 代…

用 Pygame 实现一个乒乓球游戏

用 Pygame 实现一个乒乓球游戏 伸手需要一瞬间&#xff0c;牵手却要很多年&#xff0c;无论你遇见谁&#xff0c;他都是你生命该出现的人&#xff0c;绝非偶然。若无相欠&#xff0c;怎会相见。 引言 在这篇文章中&#xff0c;我将带领大家使用 Pygame 库开发一个简单的乒乓球…

系统优化工具 | Windows Manager v2.0.5 便携版

Windows Manager 是一款专为Microsoft Windows 10/11设计的系统优化和管理软件。它集成了多种实用程序&#xff0c;旨在帮助用户更好地管理和优化Windows操作系统。该软件的功能包括系统清理、系统优化、系统修复、硬件信息查看和系统设置调整等。 系统清理&#xff1a;Window…

Qt Creator项目模板介绍

在Qt Creator中创建项目时&#xff0c;用户可以从多个模板类别中进行选择&#xff0c;以满足不同的开发需求。 Application(Qt) 在Application(Qt)类别下&#xff0c;Qt Creator提供了多种用于创建不同类型Qt应用程序的模板。这些模板主要包括&#xff1a; Qt Widgets Applic…

前缀和与差分(二维)

二维前缀和 下面是一个二维数组&#xff0c;我们要求&#xff08;1&#xff0c;1&#xff09;到&#xff08;2&#xff0c;2&#xff09;区间内的所有元素的和&#xff0c;最原始的方法就是遍历每个元素然后一个一个加起来&#xff0c;此时时间复杂度为O(n*m)。 我们之前学过…

【计算机网络篇】电路交换,报文交换,分组交换

本文主要介绍计算机网络中的电路交换&#xff0c;报文交换&#xff0c;分组交换&#xff0c;文中的内容是我认为的重点内容&#xff0c;并非所有。参考的教材是谢希仁老师编著的《计算机网络》第8版。跟学视频课为河南科技大学郑瑞娟老师所讲计网。 目录 &#x1f3af;一.划分…

【实战篇】MySQL是怎么保证主备一致的?

MySQL 主备的基本原理 如图 1 所示就是基本的主备切换流程。 在状态 1 中&#xff0c;客户端的读写都直接访问节点 A&#xff0c;而节点 B 是 A 的备库&#xff0c;只是将 A 的更新都同步过来&#xff0c;到本地执行。这样可以保持节点 B 和 A 的数据是相同的。 当需要切换的…

PostgreSQL JAVA与SQL集成之PL/Java

PostgreSQL pljava PL/Java 作为 PostgreSQL 的编程语言扩展之一&#xff0c;与 PL/pgSQL&#xff08;PostgreSQL 原生的存储过程语言&#xff09;相比&#xff0c;提供了 Java 语言特有的面向对象功能&#xff0c;并支持 Java 的标准库和第三方库。由于 Java 是一种跨平台的语…

企业搭建VR虚拟展厅,如何选择搭建平台?

选择虚拟展厅搭建平台时&#xff0c;需要综合考虑多个因素以确保平台能够满足您的具体需求并提供高质量的展示效果。以下是一些关键的选择标准&#xff1a; 1. 技术实力与创新能力 技术平台选择&#xff1a;确保平台支持虚拟现实&#xff08;VR&#xff09;、增强现实&#xf…

Qt clicked()、clicked(bool)、toggled(bool)信号的区别和联系

clicked() 信号 所属控件&#xff1a;clicked()信号是QAbstractButton类&#xff08;及其子类&#xff0c;如QPushButton、QRadioButton、QCheckBox等&#xff09;的一个信号。clicked信号可以说是许多控件&#xff08;特别是按钮类控件&#xff0c;如QPushButton&#xff09;…

基于lnmp搭建wordpress

一、案例目标 &#xff08;1&#xff09;了解LNMP环境的组成。 &#xff08;2&#xff09;了解LNMP环境的部署与安装。 &#xff08;2&#xff09;了解WordPress应用的部署与使用。 二、节点规划 IP 主机名 节点 192.168.200.20 lnmp lnmp服务节点 三、案例实施 LN…

C#基于SkiaSharp实现印章管理(8)

上一章虽然增加了按路径绘制文本&#xff0c;支持按矩形、圆形、椭圆等路径&#xff0c;但测试时发现通过调整尺寸、偏移量等方式不是很好控制文本的位置。相对而言&#xff0c;使用弧线路径&#xff0c;通过弧线起始角度及弧线角度控制文本位置更简单。同时基于路径绘制文本时…

2024 新手指南:轻松掌握 Win10 的录屏操作

之前为了节约成本我们公司都采用录制软件操作都方式来为异地的同事进行远程操作培训的。所以我们尝试了不少的录屏工具&#xff0c;这里我就分享下win10怎么录屏的操作过程。 1.福昕录屏大师 链接&#xff1a;www.foxitsoftware.cn/REC/ 这款录屏工具是初学者的理想之选&…

Linux入门2

文章目录 一、Linux基本命令1.1 文件的创建和查看命令1.2 文件的复制移动删除等命令1.3 查找命令1.4 文件的筛选和管道的使用1.5 echo、tail和重定向符 二、via编辑器三、权限控制3.1 root用户&#xff08;超级管理员&#xff09;3.2 用户和用户组3.3 权限信息3.4 chmod命令 一…

【python设计模式4】结构型模式1

目录 适配器模式 桥模式 适配器模式 将一个类的接口转换成客户希望的另外一个接口&#xff0c;适配器使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。实现适配器的两种方式&#xff0c;类适配器使用多继承&#xff0c;对象适配器使用组合。组合就是一个类中放入另…

Django-cookie和session

文章目录 前言CookieSession 一、Django 中 Cookie二、Django 中 Session三.区别 前言 Cookie Cookie 是由服务器发送到用户浏览器的小文件&#xff0c;用于存储用户的相关信息。每次用户访问网站时&#xff0c;浏览器会将这些 cookie 发送回服务器 特点: 1. 数据存储在客户…

网络质量劣化分析:保障业务连续性与网络优化的核心步骤

目录 什么是网络质量劣化&#xff1f; 常见的网络质量劣化表现 网络质量劣化的常见原因 1. 网络设备性能不足或老化 2. 网络配置问题 3. 链路拥塞 4. 外部攻击或恶意流量 案例分析&#xff1a;一次企业内部网络劣化的解决过程 如何防止网络质量劣化&#xff1f; 结语…