【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: <p></p> <h2><span style="font-family:宋体; font-size:16pt">STL<span style="font-family:宋体">入门与简介</span></span><span style="font-family:宋体; font-size:16pt"></span></h2> <pre name="code" class="ja

STL入门与简介

#include<iostream>
#include <vector>//容器
#include<array>//数组
#include <algorithm>//算法

using namespace std;

//实现一个类模板,专门实现打印的功能
template<class T> //类模板实现了方法
class myvectorprint
{
public:
	void operator ()(const T &t)//重载,使用(),打印
	{
		std::cout << t << std::endl;
	}
};

void main()
{
	vector<int>  myvector;
	myvector.push_back(11);
	myvector.push_back(21);
	myvector.push_back(31);
	myvector.push_back(81);
	myvector.push_back(51);

	array<int, 10> myarray = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };

	myvectorprint<int >print;//对于打印进行实例化

	          //begin,endl迭代器,是一个指针
	for_each (myvector.begin(), myvector.end(),print);
	for_each(myarray.begin(), myarray.end(), print);
	cin.get();

	//算法可以适用于任何容器,for_each是一个算法
}

STL容器概念

数组线性容器

#include<iostream>
#include<vector>
#include <array>
#include <tuple>
using namespace std;

void main1()
{
	array<int, 5>myarray = { 1, 2, 3, 4, 5 };
	//数组,静态数组,栈上

	vector <int >myvetor;
	myvetor.push_back(1);
	//动态数组,堆上,

	//不需要变长,容量较小,array
	//需要变长,容量较大,vetor	
}	

链式容器

#include<iostream>
#include <hash_set>
#include <list>
#include<stdio.h>


//list适用于经常插入,经常删除
using namespace std;
void main()
{
	list<int> mylist;
	
	mylist.push_back(1);
	mylist.push_back(2);
	mylist.push_back(3);
	mylist.push_back(4);
	//mylist[1];
	auto ibegin = mylist.begin();//指针,指向一个迭代器,迭代器存储了位置
	auto iend = mylist.end();
	//list用迭代器进行遍历
	for (;ibegin!=iend;ibegin++)
	{
		cout << *ibegin << endl;
		printf("%p,%p\n",  ibegin._Ptr,ibegin);//重载
	}

	cin.get();
}

//list删除
void main3()
{
	list<int> mylist;
	mylist.push_back(1);
	mylist.push_back(2);
	mylist.push_back(3);
	mylist.push_back(4);	
	mylist.push_back(5);
	//auto i = mylist.begin();//删除元素,依赖于迭代器,
	//++i;
	//++i;
	//++i;
	auto i = mylist.end();//end最后一个没有实体,
	//
	i--;
	mylist.erase(i);//链式存储,不允许下标访问
	//只能用迭代器,链表迭代器只能用++,--
	//mylist.clear();清空
	auto ibegin = mylist.begin();//指针,指向一个迭代器,迭代器存储了位置
	auto iend = mylist.end();

	for (; ibegin != iend; ibegin++)
	{
		if ((*ibegin) == 3)
		{
			mylist.erase(ibegin);//删除,删除的时候迭代器会发生
			break;
		}
		//cout << *ibegin << endl;
	}
	{
		auto ibegin = mylist.begin();//指针,指向一个迭代器,迭代器存储了位置
		auto iend = mylist.end();

		for (; ibegin != iend; ibegin++)
		{
			cout << *ibegin << endl;
		}
	}
	cin.get();
}

void main4()
{
	int a[5] = { 1, 2, 3, 4, 5 };
	list<int > mylist(a, a + 5);//根据数组初始化,
	//传递开始地址,传递结束地址
   //	mylist(0);
	//mylist[1];只能用迭代器访问
	mylist.push_back(10);
	mylist.push_front(12);
	auto ibegin = mylist.begin();//指针,指向一个迭代器,迭代器存储了位置
	auto iend = mylist.end();

	for (; ibegin != iend; ibegin++)
	{
		if (*ibegin==3)
		{
			mylist.insert(ibegin ,30);
			break;//删除或者插入,迭代器都会发生变化
		}
	}

	mylist.remove(30);//直接一个函数,根据元素来删除

	{
		auto ibegin = mylist.begin();//指针,指向一个迭代器,迭代器存储了位置
		auto iend = mylist.end();

		for (; ibegin != iend; ibegin++)
		{
			cout << *ibegin << endl;
		}
	}

	cin.get();
}

void main5()
{
	int a[5] = { 1, 2, 3, 4, 5 };
	list<int > mylist(a, a + 5);//根据数组初始化,
	auto rb = mylist.rbegin();
	auto re = mylist.rend();
	//同时正向与方向查找
	for (;rb != re; rb++)
	{
		cout << *rb << endl;
	}

	cin.get();
}

void  main6()
{
	int a[5] = { 1, 2, 3, 104, 5 };
	list<int > mylist1(a, a + 5);//根据数组初始化,
	int b[5] = { 11, 122,33, 44, 55 };
	list<int > mylist2(b, b + 5);//根据数组初始化,
	mylist1.sort();
	mylist2.sort();//排序


	mylist1.merge(mylist2);//合并之前必须有序

	{
		auto ibegin = mylist1.begin();//指针,指向一个迭代器,迭代器存储了位置
		auto iend = mylist1.end();

		for (; ibegin != iend; ibegin++)
		{
			cout << *ibegin << endl;
		}
	}
	cout << "\n\n\n";
	{
		auto ibegin = mylist2.begin();//指针,指向一个迭代器,迭代器存储了位置
		auto iend = mylist2.end();

		for (; ibegin != iend; ibegin++)
		{
			cout << *ibegin << endl;
		}
	}
	cin.get();
}

void main7()
{
		int a[6] = { 1, 2,98, 2, 5, 98 };
		list<int > mylist1(a, a + 6);//根据数组初始化,
		{
			auto ibegin = mylist1.begin();//指针,指向一个迭代器,迭代器存储了位置
			auto iend = mylist1.end();

			for (; ibegin != iend; ibegin++)
			{
				cout << *ibegin << endl;
			}
		}
		mylist1.sort();
		mylist1.unique();//唯一依赖于排序
		cout << "\n\n\n";
		{
			auto ibegin = mylist1.begin();//指针,指向一个迭代器,迭代器存储了位置
			auto iend = mylist1.end();

			for (; ibegin != iend; ibegin++)
			{
				cout << *ibegin << endl;
			}
		}

		cin.get();
}

红黑树容器

#include<iostream>
#include <set>
using namespace std;

void main1231()
{
	set<int>myset;
	myset.insert(10);
	myset.insert(9);
	myset.insert(8);
	myset.insert(7);
	myset.insert(5);
	myset.insert(6);
	myset.insert(7);
	//myset.insert(7);重复会被舍弃
	auto findpos = myset.find(10);
	cout << "  find ->" << *findpos << "  \n";

	auto ib = myset.begin();
	auto ie = myset.end();
	for (;ib!=ie;ib++)
	{
		cout << *ib << "  ";
		
	}
	std::cout << "\n"<<myset.size() << endl;
	cin.get();
}

容器迭代器仿函数算法STL概念例子

算法的概念

#include <algorithm>
#include <iostream>
using namespace std;

struct print
{
	void operator ()(int x)//重载了()符号,之际调用()
	{
		std::cout << x << endl;
	}
};

void printA(int x)
{
	std::cout << x << endl;
}

void main1()
{
	int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int *p = find(a, a + 10, 8);
	std::cout << (void*)a << (void*)(a + 10) << std::endl;
	std::cout << *p << endl;
	std::cout << p << endl;
	if (p==(a+10))
	{
		std::cout << "没有找到\n";
	}
	for_each(a, a + 4, print());//遍历每一个元素,
	//printA是一个函数指针,必须是函数类型

	cin.get();
}

容器与迭代器

#include<iostream>
#include <set>
#include <stdio.h>
#include <list>
#include <vector>
#include <algorithm>
#include <functional>

using namespace std;

void main12()
{
	multiset <int>myset;
	myset.insert(11);
	myset.insert(12);
	myset.insert(13);
	myset.insert(10);
	myset.insert(10);
	myset.insert(100);
	auto ib = myset.begin();
	auto ie = myset.end();

	for (;ib!=ie;ib++)
	{
		std::cout << *ib << std::endl;
		printf("%p,%p\n", ib, ib._Ptr);//智能指针
	}

	cin.get();
}


void main()
{
	list<int> mylist;
	mylist.push_back(11);
	mylist.push_back(1);
	mylist.push_back(16);
	mylist.push_back(1);
	mylist.push_back(18);

	auto ib = mylist.begin();
	auto ie = mylist.end();
	for (;ib!=ie;ib++)
	{
		std::cout << *ib << std::endl;
		printf("%p\n", ib);
		
		printf("%p\n", ib._Ptr);

		//智能指针  STL  bug ,分行打印,先访问内部,再访问外部

		printf("%p,%p\n", ib._Ptr,ib );//智能指针.
	}

	cin.get();
}


void mainx()
{
	list<int> mylist;

	mylist.push_back(1);
	mylist.push_back(2);
	mylist.push_back(3);
	mylist.push_back(4);
	//mylist[1];
	auto ibegin = mylist.begin();//指针,指向一个迭代器,迭代器存储了位置
	auto iend = mylist.end();
	//list用迭代器进行遍历
	for (; ibegin != iend; ibegin++)
	{
		cout << *ibegin << endl;
		printf("%p,%p\n", ibegin._Ptr, ibegin);//重载
	}

	cin.get();
}

bool less3(int x)
{
	return x < 3;

}

void mainu()
{
	vector<int> mylist;
	mylist.push_back(1);
	mylist.push_back(2);
	mylist.push_back(16);
	mylist.push_back(1);
	mylist.push_back(18);

	using namespace std;

	auto ib = mylist.begin();
	auto ie = mylist.end();
	for (; ib != ie; ib++)
	{
		std::cout << *ib << std::endl;		
	}

	//仿函数可以实现一定的算法策略

	//auto ifind = find_if(++mylist.begin(), mylist.end(), bind1st( greater<int>(), 3));
	auto ifind = find_if(mylist.begin(), mylist.end(), less3);
	// bind1st( greater<int>(), 3)
     //绑定一个函数, greater<int>(),3

	std::cout <<"\n\n\n\n"<< *ifind << endl;

	cin.get();
}

栈队列双端队列优先队列

#include <stack>
#include <iostream>

using namespace std;

void mainB()
{
	int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

	stack<int> mystack;
	for (int i = 0; i < 10;i++)
	{
		mystack.push(a[i]);
	}

	while (!mystack.empty())
	{
		int num = mystack.top();
		std::cout << num << " ";
		mystack.pop();
	}

	cin.get();
}

void mainA()
{
	int num;
	cin >> num;
	stack<int> mystack;
	for ( ;num;num/=2)
	{
		mystack.push(num % 2);
		std::cout << "当前元素个数" << mystack.size() << endl;
	}

	while (!mystack.empty())
	{
		int num=mystack.top();
		std::cout << num << " ";
		mystack.pop();
	}

	cin.get();
	cin.get();
}

队列

#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
#include<deque>//双端队列

//提供了二维动态数组的功能,头部,尾部,任意操作
using namespace std;

void mainX()
{
	queue<char *>myq;
	myq.push("calc");
	myq.push("notepad");
	myq.push("tasklist");
	myq.push("mspaint");

	while (!myq.empty())
	{
	  char *p=	myq.front();//获取
	  system(p);
	  myq.pop();
	}
}


void mainY()
{
	deque<int> mydq;
	mydq.push_back(1);
	mydq.push_back(11);
	mydq.push_back(111);
	mydq.push_back(1111);
	mydq.push_back(11111);
	mydq.push_front(123);
	mydq.insert(mydq.begin() + 3, 100);//插入

	for (int i = 0; i < mydq.size();i++)
	{
		std::cout << mydq[i] << std::endl;
	}
	auto ib = mydq.begin();
	auto ie = mydq.end();
	for (; ib != ie; ib++)
	{
		std::cout << *ib<< std::endl;
	}

	cin.get();
}

void main11()
{
	deque<int> mydq;
	mydq.push_back(1);
	mydq.push_back(11);
	mydq.push_back(111);
	mydq.push_back(1111);
	mydq.push_back(11111);
	mydq.push_front(123);
	//mydq.erase(mydq.begin());
	//mydq.erase(mydq.end() - 1);
	mydq.pop_front();//头部弹出
	mydq.pop_back();//尾部
	//mydq.clear();
	
	auto ib = mydq.begin();
	auto ie = mydq.end();
	for (; ib != ie; ib++)
	{
		std::cout << *ib << std::endl;
	}

	cin.get();
}

void main1234()
{
	deque<int> mydq1;
	mydq1.push_back(1);
	mydq1.push_back(11);
	mydq1.push_back(111);
	mydq1.push_back(1111);
	mydq1.push_back(11111);

	deque<int> mydq2;
	mydq2.push_back(2);
	mydq2.push_back(21);
	mydq2.push_back(211);
	mydq2.push_back(2111);
	
	mydq1.swap(mydq2);
	//块语句
	{
		auto ib = mydq1.begin();
		auto ie = mydq1.end();
		for (; ib != ie; ib++)
		{
			std::cout << *ib << std::endl;
		}
	}

	{
		auto ib = mydq2.begin();
		auto ie = mydq2.end();
		for (; ib != ie; ib++)
		{
			std::cout << *ib << std::endl;
		}
	}

	cin.get();
}

void mainXF()
{
	deque<int> mydq1;
	mydq1.push_back(1);
	mydq1.push_back(11);
	mydq1.push_back(111);
	mydq1.push_back(1111);
	mydq1.push_back(11111);
	std::cout << mydq1.front() << std::endl;
	std::cout << mydq1.back() << std::endl;
	std::cout << mydq1.max_size() << std::endl;
	std::cout << mydq1.size() << std::endl;


	cin.get();
}

void  mainRT()
{
	priority_queue<int > myq;
	myq.push(10);
	myq.push(12);
	myq.push(11);
	myq.push(110);
	myq.push(101);//自动排序

	while (!myq.empty())
	{
		std::cout << myq.top() << endl;
		myq.pop();
	}

	cin.get();
}


struct student
{
	int age;
	string name;
};
//strcmp==0; 字符串比较, c风格
struct stuless
{
	//仿函数
	bool operator()(const student &s1,  const student &s2)
	{
		return s1.age < s2.age;
	}
};

void main()
{                  //类名,   //存储         //比大小
	priority_queue<student, deque<student>, stuless> myq;
	student s1;
	s1.age = 10;
	s1.name = "谭胜";
	student s2;
	s2.age = 9;
	s2.name = "熊飞";
	student s3;
	s3.age = 19;
	s3.name = "熊peng飞";
	myq.push(s1);
	myq.push(s2);
	myq.push(s3);
	while (!myq.empty())
	{
		std::cout << myq.top().age << myq.top().name << endl;
		myq.pop();
	}

	cin.get();
}

数据结构堆的概念

堆数据结构是一种数组对象,它可以被视为一科完全二叉树结构。它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。 

数组的形式,采用顺序存储,构成树的结构。

红黑树容器

Set 每一个节点就是一个基本的节点数据

#include<iostream>
#include <set>
#include <string>
#include <bitset>

using namespace std;

struct strless
{
	bool operator()(const char *str1, const char *str2) //二分查找法依赖于有序,字符串有序
	{
		return strcmp(str1, str2)  <  0;
	}
};

//红黑树,处理纯数字非常少,处理类对象以及字符串
void main1()
{
	//set<char *, strless> myset(strless());//默认构造
	const char *cmd[] = { "abc", "calc", "notepad", "const","xyz","ghj" };

	set< const char *, strless> myset(cmd, cmd + 6, strless());//构造
	myset.insert("1234");
	myset.insert("4567");

	//pair起到获取插入返回值,第一个类型,类型比大小的方式
	pair<set<const char *>::iterator, bool> p = myset.insert("9876");
	cout << "pair start" << endl;
	cout << *(p.first) <<"   "<< p.second << endl;
	cout << "pair over" << endl;

	auto ib = myset.begin();
	auto ie = myset.end();
	for (;ib!=ie;ib++)
	{
		cout << *ib << endl;
	}
	auto rb = myset.rbegin();
	auto re = myset.rend();
	for (; rb != re; rb++)
	{
		cout << *rb << endl;
	}
	set<const char *, strless>::iterator pfind = myset.find("xyz");//查找
	std::cout <<"\n\n\n"<< *pfind << endl;

//	std::cout << "\n\n\n" << *p << endl;
	cin.get();
}

Multiset 内部机制:红黑树的每一个节点是链表

#define _CRT_SECURE_NO_WARNINGS
#include <set>
#include <iostream>
#include <string>

//mutiset每一个节点都是一个链表,set每个节点就是一个节点
using namespace std;

struct student
{
	int id;
	char name[30];
};
//排序
struct stuless
{
	bool operator()(const student &s1, const student &s2)
	{
		return s1.id < s2.id;
	}
};

void main2()
{
	student sarray[3] = { { 10, "tansheng" }, { 3, "liguilong" }, { 4, "xiongfei" } };
	multiset<student, stuless> myset (sarray, sarray + 3, stuless());
	student stu1;
	stu1.id = 20;
	strcpy(stu1.name, "mouzhiwei");
	myset.insert(stu1);
	strcpy(stu1.name, "mouzhiwei1");
	myset.insert(stu1);
	strcpy(stu1.name, "mouzhiwei2");
	myset.insert(stu1);
	auto ib = myset.begin();
	auto ie = myset.end();
	for (;ib!=ie;ib++)
	{
		cout << (*ib).id << "  " << (*ib).name << endl;
	}

	cin.get();
}

映射map 本质也是红黑树,可以同时存储很多数据。

#include <map>//也是红黑树
#include <iostream>

using namespace std;

void main1111()
{
	map<const char * , int> mymap;
	mymap["司令"] = 10;//映射 ,对等的映射查找
	mymap["军长"] = 9;
	mymap["师长"] = 8;
	mymap["旅长"] = 7;

	cout << mymap["司令"] << endl;
	cout << mymap["军长"] << endl;
	cout << mymap["师长"] << endl;
	cout << mymap["旅长"] << endl;
	
	std::cin.get();
}

struct  student
{
	char * name;
	int  year;
};

struct stuinfo
{
	int id;
	student stu;
};

void main3213()
{
	stuinfo infoarrary[] = { { 10, { "yincheng1", 21 }  },
	                         { 5, { "yincheng2", 22 } } ,
							 { 25, { "yincheng3", 30 } } };

	map<int, student> m;//编号映射 结构体
	for (int i = 0; i < 3;i++)
	{
		m[ infoarrary[i].id ] = infoarrary[i].stu;//编号映射一个学生的信息	
	}
	stuinfo infoarrarys = { 101, { "china", 99 } };
	m[25] = infoarrarys.stu;//映射

	map<int,student>::iterator ib = m.begin();
	auto ie = m.end();
	for (;ib!=ie;ib++)
	{
		cout << (*ib).first << endl;
		cout << (*ib).second.name <<"  " <<(*ib).second.year << endl;
	}
	
	cin.get();
}

Multimap  每一个节点又是一个链表

#include <map>
#include <iostream>

using namespace std;

//map,mutlimap区别是map每一个节点是一个映射
//multimap每一个一个节点是映射的链表的开头
void main121321()
{
	map<const char *, int> m;
	m.insert(pair<const char *, int>("司令1",101));
	m.insert(pair<const char *, int>("司令2", 102));
	m.insert(pair<const char *, int>("司令3", 103));
	m.insert(pair<const char *, int>("司令1", 104));

	map<const char *, int>::iterator ib = m.begin();
	auto ie = m.end();
	for (; ib != ie; ib++)
	{
		cout << (*ib).first << "   " << (*ib).second << "\n";
	}
	
	cin.get();
}

void main2123123()
{
	multimap<const char *, int> m;
	m.insert(pair<const char *, int>("司令1", 101));
	m.insert(pair<const char *, int>("司令2", 102));
	m.insert(pair<const char *, int>("司令3", 103));
	m.insert(pair<const char *, int>("司令1", 104));

	auto ib = m.begin();
	auto ie = m.end();
	for (; ib != ie; ib++)
	{
		cout << (*ib).first << "   " << (*ib).second << "\n";
	}
	
	cin.get();
}

Hash_set  hash不需要排序,能够做到快速查找。秒查,比二分查找法还快。


#include <hash_set>
#include <iostream>
#include<algorithm>
#include <string>

using namespace std;

void main123123123()
{
	const char *cmd[] = { "abc", "calc", "notepad", "const", "xyz", "ghj" };
	hash_set<const char*> hs;//C++11自带了字符串的哈希
	
	hs.insert("chian");
	hs.insert("chi123an");
	hs.insert("chi23an");
	hs.insert("chzcian");
	hs.insert("1chzcian");

	auto pfind = hs.find("chi1213an");

	if (pfind == hs.end())
	{
		std::cout << "没有";
	}
	else
	{
		std::cout << *pfind;
	}

	cin.get();
}


void main1asdasdsad()
{
	hash_set<int> hs;
	hs.insert(91);
	hs.insert(21);
	hs.insert(41);
	
	auto ib = hs.begin();
	auto ie = hs.end();
	for (;ib!=ie;ib++)
	{
		cout << *ib << endl;
	}
	auto pfind = hs.find(211);
	if (pfind==ie)
	{
		std::cout << "没有";
	} 
	else
	{
		std::cout << *pfind;
	}

	cin.get();
}

Hash_map

#include <hash_map>//也是红黑树
#include <iostream>
#include<map>

using namespace std;

void main()
{
	map< int,const char *> m;
	m.insert(pair< int, const char *>(201, "司令1" ));
	m.insert(pair< int, const char *>(101, "司" ));
	m.insert(pair< int, const char *>(401, "司令11111" ));
	m.insert(pair< int, const char *>(301, "司令"));

	auto ib = m.begin();
	auto ie = m.end();
	for (; ib != ie; ib++)
	{
		cout << (*ib).first << "   " << (*ib).second << "\n";
	}
	{
		hash_map< int, const char *> m;
		m.insert(pair< int, const char *>(201, "司令1"));
		m.insert(pair< int, const char *>(101, "司"));
		m.insert(pair< int, const char *>(401, "司令11111"));
		m.insert(pair< int, const char *>(301, "司令"));

		auto ib = m.begin();
		auto ie = m.end();
		for (; ib != ie; ib++)
		{
			cout << (*ib).first << "   " << (*ib).second << "\n";
		}
		auto tofind = m.find(1101);
		if (tofind == ie)
		{
			cout << "没有找到";
		}
		else
		{
			cout << "\n\n\n"<<(*tofind).first<<"  "<<(*tofind).second;
		}
	}

	std::cin.get();
}


目录
相关文章
|
14天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
90 9
|
5天前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
15 1
|
8天前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
11天前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
13天前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
41 4
|
24天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
9天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
10天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
11天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。
|
10天前
|
机器学习/深度学习 算法 芯片
基于GSP工具箱的NILM算法matlab仿真
基于GSP工具箱的NILM算法Matlab仿真,利用图信号处理技术解析家庭或建筑内各电器的独立功耗。GSPBox通过图的节点、边和权重矩阵表示电气系统,实现对未知数据的有效分类。系统使用MATLAB2022a版本,通过滤波或分解技术从全局能耗信号中提取子设备的功耗信息。