当前位置: 首页 > news >正文

c++map和set剖析

在这里插入图片描述
文章参考文献:cplusplus
博主:拖拉机厂第一代码手
gitee:拖拉机厂第一代码手
c++专栏:C++


目录

  • 🧙🏼‍♂set剖析
    • 🧚🏼set简介
    • 🧚🏼set模板参数列表
    • 🧚🏼set构造函数
    • 🧚🏼set迭代器
    • 🧚🏼set容量
    • 🧚🏼set修改操作
  • 🧙🏻‍♀map剖析
    • 🧚🏿‍♂️map简介
    • 🧚🏿‍♂️map模板参数列表
    • 🧚🏿‍♂️map构造函数
    • 🧚🏿‍♂️map迭代器
    • 🧚🏿‍♂️map容量
    • 🧚🏿‍♂️map修改操作
    • 🧚🏿‍♂️map元素访问
  • 🎅🏻总结


🧙🏼‍♂set剖析

🧚🏼set简介

set是一种按照一定次序存储元素的容器。在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改,但是可以从容器中插入或删除它们。

在内部,set中的元素总是按照其内部比较对象所指示的特定严格弱排序准则进行排序。这意味着set中的元素是有序的,可以根据排序准则进行访问和操作。

set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。这使得set在需要有序存储和操作元素的场景中非常有用。

set在底层是用二叉搜索树(红黑树)实现的。这种数据结构保证了插入、删除和查找操作的平均时间复杂度都是O(log n),使得set具有高效的性能。

总的来说,set是一种有序、唯一的容器,适用于需要按照一定顺序存储和操作元素的场景。它提供了丰富的成员函数和迭代器,方便对元素进行插入、删除、查找和遍历操作。

🧚🏼set模板参数列表

在这里插入图片描述
其中:

  • T:表示set中存储的元素类型。
  • Compare:表示元素的比较函数对象类型,默认为std::less,即按照元素的小于关系进行排序。可以自定义比较函数来指定排序规则。
  • Alloc:表示分配器类型,默认为std::allocator,用于分配内存。

可以根据需要自定义这些模板参数,例如指定自定义的比较函数或分配器。

🧚🏼set构造函数

在这里插入图片描述
set类提供了多个构造函数,可以根据不同的需求进行对象的初始化。以下是常用的构造函数:

  1. 默认构造函数:
set (const key_compare& comp = key_compare(),const allocator_type& alloc = allocator_type());

创建一个空的set对象。

  1. 范围构造函数:
set (InputIterator first, InputIterator last, const Compare& comp = Compare(), const Allocator& = Allocator() );

使用范围 [first, last) 内的元素初始化set对象。要求元素类型必须支持复制构造函数。

  1. 拷贝构造函数:
set (const set& x);

使用另一个set对象x中的元素创建一个新的set对象。

需要注意的是,C++98标准中没有提供移动构造函数和初始化列表构造函数。如果需要使用移动构造函数、初始化列表构造函数或者自定义比较函数和分配器的版本,可以考虑使用C++11及更高版本的标准库。

🧚🏼set迭代器

在这里插入图片描述

set类提供了多种迭代器,用于遍历容器中的元素。以下是set的迭代器类型:

  • iterator:用于遍历set中的元素,并且可以修改元素的值。

  • const_iterator:用于遍历set中的元素,但不能修改元素的值。

这两种迭代器都支持前向遍历,即可以使用++操作符将迭代器指向下一个元素。

set类提供了以下成员函数来获取迭代器的起始和结束位置:

函数含义
begin()返回一个迭代器,指向set中第一个元素的位置。
end()返回一个迭代器,指向set中最后一个元素之后的位置。
rbegin()返回一个逆向迭代器,指向set中最后一个元素的位置。
rend()返回一个逆向迭代器,指向set中第一个元素之前的位置。

使用set的迭代器可以进行遍历、访问和修改元素的操作。例如,可以使用迭代器来遍历set中的元素并打印它们的值:

set<int> mySet = {1, 2, 3, 4, 5};// 使用迭代器遍历并打印元素
for (set<int>::iterator it = mySet.begin(); it != mySet.end(); ++it) {cout << *it << " ";
}

在这里插入图片描述

需要注意的是,set中的元素是按照升序排列的,因此使用迭代器遍历时会按照升序顺序访问元素。

另外,set还提供了reverse_iterator和const_reverse_iterator类型的迭代器,用于逆向遍历set中的元素。可以使用rbegin()和rend()成员函数获取逆向迭代器的起始和结束位置。例如:

set<int> mySet = {1, 2, 3, 4, 5};// 使用逆向迭代器遍历并打印元素
for (set<int>::reverse_iterator rit = mySet.rbegin(); rit != mySet.rend(); ++rit) {cout << *rit << " ";
}

在这里插入图片描述

这样会按照降序顺序访问set中的元素。

需要注意的是,end()和rend()返回的迭代器并不指向set中的有效元素,而是指向最后一个元素之后的位置。因此在遍历时,通常使用!=来判断迭代器是否到达结束位置。

🧚🏼set容量

在这里插入图片描述
set类提供了一些成员函数来获取容器的容量信息。以下是set的容量相关的成员函数:

  1. size():返回set中元素的个数。

  2. empty():检查set是否为空,如果为空则返回true,否则返回false。

  3. max_size():返回set对象能够容纳的最大元素数量。

这些成员函数可以用于获取set的容量信息。例如,可以使用size()函数获取set中元素的个数:

set<int> mySet = {1, 2, 3, 4, 5};cout << "Size of set: " << mySet.size() << endl;

在这里插入图片描述

可以使用empty()函数检查set是否为空:

set<int> mySet;if (mySet.empty()) {cout << "Set is empty" << endl;
} else {cout << "Set is not empty" << endl;
}

在这里插入图片描述

这些函数对于判断set是否为空或者获取set中元素的个数非常有用。

另外,set类还提供了一个成员函数max_size(),用于返回set对象能够容纳的最大元素数量。max_size()函数返回的是一个整数,表示set对象能够容纳的最大元素数量。这个值取决于操作系统和编译器的限制。

set<int> mySet;cout << "Maximum size of set: " << mySet.max_size() << endl;

在这里插入图片描述

需要注意的是,max_size()返回的是一个理论上的最大值,实际上可能由于系统资源限制而无法达到这个值。因此,在使用set时应该根据实际情况进行内存和资源的管理。

🧚🏼set修改操作

set容器是一种有序的容器,不允许直接修改容器中的元素值。这是因为set容器中的元素是根据其值进行排序的,直接修改元素的值可能导致元素的顺序发生改变,破坏了set容器的有序性。
在这里插入图片描述

然而,可以使用erase()函数删除set容器中的元素,然后使用insert()函数插入一个新的元素来实现间接的修改操作。

set容器提供了以下成员函数用于插入、删除、交换和清空元素:

  1. insert():用于将元素插入set容器中。插入操作的时间复杂度为O(log N),其中N是set中元素的数量。有以下几种用法:

insert(value):将value插入set中。
insert (position, value):将value插入到position的位置。
insert(first, last):将[first, last)范围内的元素插入set中。

  1. erase():用于从set容器中删除元素。删除操作的时间复杂度为O(log N),其中N是set中元素的数量。有以下几种用法:

erase(value):删除set中与value相等的元素。
erase(iterator):删除迭代器指向的元素。
erase(first, last):删除[first, last)范围内的元素。

  1. swap():用于交换两个set容器的内容。交换操作的时间复杂度为O(1)。有以下几种用法:

swap(set1, set2):交换set1和set2的内容。

  1. clear():用于清空set容器中的所有元素。清空操作的时间复杂度为O(N),其中N是set中元素的数量。

以下是一个示例代码,演示了如何使用这些成员函数:

#include <iostream>
#include <set>int main() 
{std::set<int> mySet;// 插入元素mySet.insert(5);mySet.insert(3);mySet.insert(8);// 删除元素mySet.erase(3);// 交换容器内容std::set<int> anotherSet;anotherSet.insert(10);anotherSet.insert(20);mySet.swap(anotherSet);// 清空容器mySet.clear();return 0;
}

在这里插入图片描述

🧙🏻‍♀map剖析

🧚🏿‍♂️map简介

map是C++标准库中的关联容器之一,它提供了一种以键值对(Key-Value)形式存储和访问元素的方式。map容器中的元素是按照键的顺序进行排序的,并且每个键只能出现一次。

特点:

  1. map中的元素是按照键的顺序进行排序的,默认情况下是按照键的升序排列。

  2. 在map中,键值(key)通常用于排序和唯一标识元素,而值(value)存储与键值关联的内容。键值和值的类型可以不同,但在map内部,键值和值通过成员类型value_type绑定在一起,取别名为pair<const key, T>。

  3. map中的元素是自动根据键进行排序的,因此可以通过键快速查找、插入和删除元素。

  4. map支持下标访问符([]),可以通过键值获取对应的值。

  5. map通常是基于红黑树实现的,因此插入、删除和查找操作的平均时间复杂度为O(log N),其中N是map中元素的数量。

🧚🏿‍♂️map模板参数列表

在这里插入图片描述

  • Key:键类型,表示map中的键值类型。
  • T:值类型,表示map中存储的值类型。
  • Compare:比较函数类型,用于指定键的比较方式。默认情况下,使用std::less,即使用键类型的小于运算符进行比较。
  • Alloc:分配器类型,用于指定内存分配策略。默认情况下,使用std::allocator来分配内存。

🧚🏿‍♂️map构造函数

在这里插入图片描述

map容器提供了多个构造函数,可以根据不同的需求来创建map对象。以下是一些常用的构造函数:

  1. 默认构造函数:
map (const key_compare& comp = key_compare(),const allocator_type& alloc = allocator_type());

创建一个空的map对象。

  1. 区间构造函数:
map (InputIterator first, InputIterator last,const key_compare& comp = key_compare(),const allocator_type& alloc = allocator_type());

使用[first, last)范围内的元素来构造map对象。要求范围内的元素类型必须能够隐式转换为std::pair<const Key, T>。

  1. 拷贝构造函数:
map (const map& x);

使用另一个map对象otherMap中的元素来构造新的map对象。

🧚🏿‍♂️map迭代器

在这里插入图片描述
map类提供了多种迭代器,用于遍历容器中的元素。以下是map的迭代器类型:

  • iterator:用于遍历map中的元素,并且可以修改元素的值。

  • const_iterator:用于遍历map中的元素,但不能修改元素的值。

这两种迭代器都支持前向遍历,即可以使用++操作符将迭代器指向下一个元素。

map迭代器的常用操作有:

  • begin():返回指向map中第一个元素的迭代器。
  • end():返回指向map中最后一个元素之后位置的迭代器,通常用于判断循环结束的条件。
  • rbegin():返回指向map中最后一个元素的逆向迭代器。
  • rend():返回指向map中第一个元素之前位置的逆向迭代器。

下面是一个示例代码,展示了如何使用map迭代器以及一些常用的函数操作:

#include <iostream>
#include <map>
using namespace std;int main()
{map<string, string> translate{ make_pair("apple", "苹果"), make_pair("banana", "香蕉"), make_pair("bear", "梨")};// 使用迭代器遍历translatecout << "正向遍历" << endl;map<string, string>::iterator it;for (it = translate.begin(); it != translate.end(); ++it) {cout << "Key: " << it->first << ", Value: " << it->second << endl;}//使用逆向迭代器遍历translatecout << "逆向遍历" << endl;map<string, string>::reverse_iterator rit;for (rit = translate.rbegin(); rit != translate.rend(); ++rit) {cout << "Key: " << rit->first << ", Value: " << rit->second << endl;}return 0;
}

在这里插入图片描述

🧚🏿‍♂️map容量

在这里插入图片描述
map提供了一些方法来获取容器的容量信息,下面是关于map容量和元素访问的一些常用方法:

  • empty():判断map是否为空,如果为空则返回true,否则返回false。
	map<int, string> myMap{ make_pair(1, "a"), make_pair(2, "b"), make_pair(3, "c") };if (myMap.empty()) {cout << "Map is empty" << endl;}else {cout << "Map is not empty" << endl;}

在这里插入图片描述

  • size():返回map中元素的个数。
	map<int, string> myMap{ make_pair(1, "a"), make_pair(2, "b"), make_pair(3, "c") };cout << "Map size: " << myMap.size() << endl;

在这里插入图片描述

  • max_size():该方法用于获取map能容纳的最大元素个数。这是由底层实现和系统限制决定的,因此它可能会因系统而异。
	map<int, string> myMap{ make_pair(1, "a"), make_pair(2, "b"), make_pair(3, "c") };cout << "Max map size: " << myMap.max_size() << endl;

在这里插入图片描述

🧚🏿‍♂️map修改操作

在这里插入图片描述

map提供了多种方法来修改容器中的元素,以下是一些常用的map修改操作方法:

  • insert函数:用于向map中插入新的键值对。它有多个重载版本,可以接受不同的参数类型。常见的用法包括:
	map<int, string> myMap;myMap.insert(make_pair(1, "apple")); // 插入键值对myMap.insert(pair<int, string>(2, "bear"));myMap.insert(map<int, string>::value_type(3, "banana"));

在这里插入图片描述
如果插入的键已经存在于map中,insert函数不会更新该键对应的值。

  • erase函数:用于从map中删除指定的键值对。它有多个重载版本,可以接受不同的参数类型。常见的用法包括:
	map<int, string> myMap{ make_pair(1, "a"), make_pair(2, "b"), make_pair(3, "c") };myMap.erase(2);

在这里插入图片描述

  • swap函数:用于交换两个map的内容。它接受一个map作为参数,并将两个map的内容进行交换。用法如下:
	map<int, string> myMap1{ make_pair(1, "a"), make_pair(2, "b"), make_pair(3, "c") };map<int, string> myMap2{ make_pair(1, "apple"), make_pair(2, "banana"), make_pair(3, "bear") };myMap1.swap(myMap2);

在这里插入图片描述

  • clear函数:用于清空map中的所有键值对,使map成为空容器。用法如下:
map<int, string> myMap{ make_pair(1, "apple"), make_pair(2, "banana"), make_pair(3, "bear") };
// 填充myMap的内容
myMap.clear(); // 清空myMap中的所有键值对

在这里插入图片描述

🧚🏿‍♂️map元素访问

map提供了一些方法来查找元素和访问元素的值。

以下是关于map的find、count和operator[]方法的介绍:

  • find(key):该方法用于查找键为key的元素。如果找到,它返回一个指向该元素的迭代器;如果找不到,它返回一个指向map中最后一个元素之后位置的迭代器(即end()迭代器)。
	map<int, string> myMap{make_pair(1, "a"), make_pair(2, "b"), make_pair(3, "c")};map<int, string>::iterator it = myMap.find(2);if (it != myMap.end()) {cout << "Found: " << it->second << endl;}else {cout << "Not Found" << endl;}

在这里插入图片描述

  • count(key):该方法用于计算键为key的元素在std::map中的个数。由于std::map中键是唯一的,因此返回值只能是0或1。如果元素存在,则返回1;如果元素不存在,则返回0。
	map<int, string> myMap{ make_pair(1, "a"), make_pair(2, "b"), make_pair(3, "c") };int count = myMap.count(2);if (count > 0) {cout << "Element exists" << endl;}else {cout << "Element does not exist" << endl;}

在这里插入图片描述

  • operator:该方法用于通过键访问对应的值。如果键存在,则返回对应的值;如果键不存在,则会插入一个新的键值对,并返回默认构造的值。
	map<int, string> myMap{ make_pair(1, "a"), make_pair(2, "b"), make_pair(3, "c") };string value1 = myMap[2];string value2 = myMap[4];cout << "Value at key 2: " << value1 << endl;cout << "Value at key 4: " << value2 << endl;

在这里插入图片描述
在这里插入图片描述

需要注意的是,使用operator[]方法访问不存在的键时,会自动插入一个新的键值对到map中,这可能会改变map的大小。

🎅🏻总结

C++中的map和set是标准库中的两个关联容器,它们都提供了高效的数据存储和检索功能。下面是对map和set的文章总结:

map:

  1. map是一个有序的关联容器,它存储了一系列的键值对,并根据键的值进行排序。
  2. 每个键值对都是唯一的,即每个键只能对应一个值。
  3. 可以使用insert函数添加新的键值对,使用erase函数删除指定的键值对,使用[]运算符访问和修改键对应的值。
  4. map提供了快速的查找操作,可以根据键的值进行快速的检索。
  5. map的底层实现是红黑树,因此插入、删除和查找操作的时间复杂度都是对数级别的。

set:

  1. set是一个有序的关联容器,它存储了一系列的唯一元素,并根据元素的值进行排序。
  2. 每个元素都是唯一的,即每个元素只能出现一次。
  3. 可以使用insert函数添加新的元素,使用erase函数删除指定的元素。
  4. set提供了快速的查找操作,可以根据元素的值进行快速的检索。
  5. set的底层实现也是红黑树,因此插入、删除和查找操作的时间复杂度都是对数级别的。

map和set都是非常有用的容器,可以在许多场景下使用。它们提供了高效的数据存储和检索功能,并且保持了元素的有序性和唯一性。在需要存储键值对或需要快速查找和删除元素的情况下,map和set都是不错的选择。

最后,如果觉得文章对你有帮助的话就来一个大大的👍吧。

在这里插入图片描述

相关文章:

c++map和set剖析

文章参考文献&#xff1a;cplusplus 博主&#xff1a;拖拉机厂第一代码手 gitee:拖拉机厂第一代码手 c专栏&#xff1a;C 目录 &#x1f9d9;&#x1f3fc;‍♂set剖析&#x1f9da;&#x1f3fc;set简介&#x1f9da;&#x1f3fc;set模板参数列表&#x1f9da;&#x1f3fc;s…...

kubernetes configmap 的data中的文件内容格式错乱

截取一段错乱的配置&#xff1a; kubectl -n monitoring get cm blackbox-exporter-configuration -o yaml apiVersion: v1 data:config.yml: "\"modules\":\n \"http_2xx\":\n \"http\":\n \"preferred_ip_protocol\"…...

A TupleBackedMap cannot be modified Mybatis分页,使用List<Map>接参,无法修改map的解决方案

问题描述 当使用Mybatis 进行Page分页&#xff0c;再使用Page< map >作为接受参数。此时尝试修改map则会报错。 报错为 java.lang.UnsupportedOperationException: A TupleBackedMap cannot be modified解决方案 使用新的数组&#xff0c;使用反射&#xff0c;构建工具…...

Leetcode-每日一题【剑指 Offer 13. 机器人的运动范围】

题目 地上有一个m行n列的方格&#xff0c;从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动&#xff0c;它每次可以向左、右、上、下移动一格&#xff08;不能移动到方格外&#xff09;&#xff0c;也不能进入行坐标和列坐标的数位之和大于k的格子。例…...

WEB集群——负载均衡集群

目录 一、 LVS-DR 群集。 1、LVS-DR工作原理 2、LVS-DR模式的特点 3、部署LVS-DR集群 3.1 配置负载调度器&#xff08;192.168.186.100&#xff09; 3.2 第一台web节点服务器&#xff08;192.168.186.103&#xff09; 3.3 第二台web节点服务器&#xff08;192.168.186.…...

ubuntu 20.0.4 搭建nvidia 显卡环境

一、安装docker 1、安装dokcer sudo apt install docker.io2、docker 添加到用户组 创建docker用户组 sudo groupadd docker添加当前用户加入docker用户组 sudo usermod -aG docker ${USER}重启docker服务 sudo systemctl restart docker切换或者退出当前账户再从新登入 …...

Windows环境下通过 系统定时 执行脚本方式 压缩并备份文件夹 到其他数据盘

环境配置 压缩时需要使用7-zip进行调用&#xff0c;因此根据自己电脑进行安装 官网&#xff1a;https://www.7-zip.org/ 脚本文件 新建记事本文件&#xff0c;重命名为git_back_up.bat echo off rem 设置utf-8可以正常显示中文 chcp 65001 > nulrem 获取当前日期和时间&…...

C++系列二:STL教程-常用算法

提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 常用算法 前言算法列举&#xff1a;算法例子 前言 还有一些我在尝试中迷惑不解的&#xff0c;有点玄幻。 算法列举&#xff1a; 排序算法&#xff1a; sort(first, last);…...

【css】渐变

渐变是设置一种颜色或者多种颜色之间的过度变化。 两种渐变类型&#xff1a; 线性渐变&#xff08;向下/向上/向左/向右/对角线&#xff09; 径向渐变&#xff08;由其中心定义&#xff09; 1、线性渐变 语法&#xff1a;background-image: linear-gradient(direction, co…...

idea打开多个项目需要开多个窗口(恢复询问弹窗)

【版权所有&#xff0c;文章允许转载&#xff0c;但须以链接方式注明源地址&#xff0c;否则追究法律责任】【创作不易&#xff0c;点个赞就是对我最大的支持】 前言 仅作为学习笔记&#xff0c;供大家参考 总结的不错的话&#xff0c;记得点赞收藏关注哦&#xff01; 使用…...

篇十三:策略模式:选择不同算法

篇十三&#xff1a;“策略模式&#xff1a;选择不同算法” 设计模式是软件开发中的重要知识&#xff0c;策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;用于在运行时根据不同的需求选择不同的算法或行为。本文将探讨策略模式的作用和实现…...

Centos7.6 安装mysql过程全记录

在centos 7.6上 离线安装mysql 的步骤&#xff0c;可参考下文&#xff1a; 一、查看当前MySQL的安装情况并卸载 1. 查看当前MySQL的安装情况 查找之前是否安装了MySQL rpm -qa|grep -i mysql 2.卸载mysql 如果已经安装mysql&#xff0c;则需要先停止MySQL&#xff0c;再删除…...

Java中的Guava是什么?

Java中的Guava是一个非常强大的Java库&#xff0c;它提供了很多实用的工具类和方法&#xff0c;可以帮助我们更高效地开发Java应用程序。从新手的角度来看&#xff0c;Guava可以让我们在Java编程中变得更加简单、快速和高效。 Guava的命名来源于“Google’s favorite Java lib…...

vue.js兄弟组件方法调用b组件调用a组件方法

vue.js 中兄弟组件方法调用 场景&#xff1a;父组件中同时引入两个子组件&#xff08;A和B&#xff09;&#xff0c;此时B组件点击按钮需要调用A组件里面的方法 方案1&#xff1a;vue的事件总线 方案2&#xff1a;自定义事件&#xff08;$emit&#xff09; 最终方案&#xff1a…...

【Kubernetes】二进制搭建

目录 二进制搭建 Kubernetes v1.20 操作系统初始化配置 关闭防火墙 关闭selinux 关闭swap 根据规划设置主机名 在master添加hosts 调整内核参数 时间同步 部署 etcd 集群 准备签发证书环境 准备cfssl证书生成工具 生成Etcd证书 上传 etcd-cert.sh 和 etcd.sh 到 …...

【MFC】08.MFC消息,自定义消息,常用控件(MFC菜单创建大总结),工具栏,状态栏-笔记

本专栏上几篇文章讲解了MFC几大机制&#xff0c;今天带领大家学习MFC自定义消息以及常用控件&#xff0c;最常用的控件请查看本专栏第一二篇文章&#xff0c;今天这篇文章介绍工具栏&#xff0c;菜单和状态栏&#xff0c;以及菜单创建大总结。 文章目录 MFC消息分类&#xff1…...

Clickhouse 数据存储

一、数据分区 数据是以分区目录的形式组织的&#xff0c;每个分区独立分开存储.这种形式&#xff0c;查询数据时&#xff0c;可以有效的跳过无用的数据文件。 1.1 数据分区的规则 分区键的取值&#xff0c;生成分区ID&#xff0c;分区根据ID决定。根据分区键的数据类型不同&am…...

c语言每日一练(3)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…...

java基础-Stream(流)、File(文件)和IO

Java中的流(Stream)提供了一个统一的接口来处理输入和输出数据&#xff0c;文件(File)提供了一种简单的方式来操作磁盘上的文件&#xff0c;而I/O则允许我们在Java程序中读写数据。 一、流Stream java中得stream是一种抽象概念&#xff0c;流可以从多种来源读取数据&#xff…...

el-table实现指定列合并

table传入span-method方法可以实现合并行或列&#xff0c;方法的参数是一个对象&#xff0c;里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。该函数可以返回一个包含两个元素的数组&#xff0c;第一个元素代表rowspan&#xff0c;第二个元素…...

38.利用matlab解 有约束无约束的参数估计对比(matlab程序)

1.简述 1.离散型随机变量的极大似然估计法: (1) 似然函数 若X为离散型, 似然函数为 (2) 求似然函数L(θ)的最大值点 θ, 则θ就是未知参数的极大似然估计值. 2.连续型随机变量的极大似然估计法: (1) 似然函数 若 X 为连续型, 似然函数为 (2) 求似然函数L(θ)的最大值点θ, 则…...

什么是React?React与VU的优缺点有哪些?

什么是React&#xff1f;什么是VUE&#xff1f; 维基百科上的概念解释&#xff0c;Vue.js是一个用于创建用户界面的开源MVVM前端JavaScript框架&#xff0c;也是一个创建单页应用的Web应用框架。Vue.js由尤雨溪&#xff08;Evan You&#xff09;创建&#xff0c;由他和其他活跃…...

区块链技术助力慈善,为您的善举赋予全新力量!

我们怀揣着一颗温暖的心&#xff0c;秉承着公开透明的理念&#xff0c;带着信任与责任&#xff0c;倾力打造了一套区块链技术驱动的去中心化捐赠与物资分发系统&#xff0c;通过智能生态网络&#xff08;IEN&#xff09;解决捐赠不透明问题的系统&#xff0c;让您的善举直接温暖…...

模拟实现消息队列项目(系列4) -- 服务器模块(内存管理)

目录 前言 1. 创建MemoryDataCenter 2. 封装Exchange 和 Queue方法 3. 封装Binding操作 4. 封装Message操作 4.1 封装消息中心集合messageMap 4.2 封装消息与队列的关系集合queueMessageMap的操作 5. 封装未确认消息集合waitMessage的操作 6. 从硬盘中恢复数据到内存中 7. Memo…...

STM32 LoRa源码解读

目录结构&#xff1a; SX1278 |-- include | |-- fifo.h | |-- lora.h | |-- platform.h | |-- radio.h | |-- spi.h | |-- sx1276.h | |-- sx1276Fsk.h | |-- sx1276FskMisc.h | |-- sx1276Hal.h | |-- sx1276LoRa.h | -- sx1276LoRaMisc.h – src |-- fifo.c |-- lora.c |-- …...

【BASH】回顾与知识点梳理(十)

【BASH】回顾与知识点梳理 十 十. 文件的格式化与相关处理10.1 格式化打印&#xff1a; printf10.2 awk&#xff1a;好用的数据处理工具awk 的逻辑运算字符 10.3 文件比对工具diffcmppatch 10.4 文件打印准备&#xff1a; pr 该系列目录 --> 【BASH】回顾与知识点梳理&#…...

【网络】应用层——HTTPS协议

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《网络》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; HTTPS协议 &#x1f349;HTTP的不安全性&#x1f349;认识HTTPS协议&#x1f353;加密解密&#x1f35…...

Windows新版文件资源管理器经常在后台弹出的临时解决方案

禁用组策略自动刷新 运行gpedit.msc找到计算机配置->管理模板->系统->组策略找到 “关闭组策略的后台刷新”启用 参考 https://answers.microsoft.com/en-us/windows/forum/all/windows-11-most-recently-opened-explorer-window/26e097bd-1eba-4462-99bd-61597b5…...

软考高项(八)项目整合管理 ★重点集萃★

&#x1f451; 个人主页 &#x1f451; &#xff1a;&#x1f61c;&#x1f61c;&#x1f61c;Fish_Vast&#x1f61c;&#x1f61c;&#x1f61c; &#x1f41d; 个人格言 &#x1f41d; &#xff1a;&#x1f9d0;&#x1f9d0;&#x1f9d0;说到做到&#xff0c;言出必行&am…...

基于python+django开发的学生信息管理系统

基于pythondjangovue.js开发的学生信息管理系统&#xff0c;师弟的课程作业 功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 功能包括&#xff1a;学生管理、班级管理、用户管理、日志管理、系统信息模块…...

网站地图制作视频教程/网站推广做什么

四种方法实现单元格内的自动换行&#xff1a;  1&#xff0e;输入数据随时换行 在输入数据时换行&#xff0c;AltEnter组合键即可实现。此方法可使已输入内容的单元格在光标所在处换行。  2&#xff0e;单元格区域内换行  将某个长行转成段落并在指定区域内换行。例如&am…...

如何建立网站自己做站长/网站提交入口大全

软件测试是确保软件质量的可靠手段&#xff0c;是软件开发过程中必不可少的重要环节。本文提出了面向复用的测试用例设计过程&#xff0c;为测试用例复用提供了实现策略。测试用例的复用对于缩短软件开发周期和降低软件开发成本具有极其重要的意义。 1、引言 随着软件工程领域的…...

php做网站架构图/国外服务器免费ip地址

Description 青子的生日快到了&#xff0c;快斗计划着带青子去游乐场玩。游乐场有好多游戏项目&#xff0c;每个游戏项目都有自己的开始和结束时间。同一时间只能玩一个游戏&#xff0c;前一个游戏结束后可以马上开始下一个游戏。为了让青子过一个愉快的生日&#xff0c;快斗决…...

网站的需求分析怎么写/网站设计规划

目录 1 问题描述 2 解决办法&#xff1a; &#xff08;修改元数据的版本&#xff09; 1 问题描述 启动了不同版本的集群&#xff0c;hive的元数据库启动报错 MetaException(message:Hive Schema version 2.1.0 does not match metastores schema version 1.2.0 Metastore is…...

axure rp9网站界面设计/网站外链查询

基本语法和实例&#xff1a;1、EXP:有三种主要的方式(完全、用户、表)1、完全&#xff1a;EXP SYSTEM/MANAGER BUFFER64000 FILEC:\FULL.DMP FULLY如果要执行完全导出&#xff0c;必须具有特殊的权限2、用户模式&#xff1a;EXP SONIC/SONIC BUFFER64000 FILEC:\SONIC.DMP O…...

web网站开发学习/外贸推广渠道有哪些

操作系统概述 1.操作系统做了什么 我们编写这样一条C语言代码 #include<stdio.h>int main() {puts("hello world");return 0; }1.用户告诉操作系统执行此程序2.操作系统接收到指令,先去磁盘上找到此程序的相关信息,然后检查其类型是否为可执行文件;紧接着通…...