C++ 容器详解

2023-05-16

  • 顺序容器
    • vector
    • list
    • deque
    • stack
    • queue
    • priority_queue
  • 关联容器
    • map
    • multimap
    • set
    • multiset
  • 无序容器
  • 容器的互相比较
  • 迭代器


顺序容器

顺序容器类型特点
vector可变大小数组支持快速随机访问。因为元素保存在连续的内存空间里中间位置添加删除元素很慢。在尾部插入删除速度快。因为要移动插入/删除位置之后的所有元素
string专用于保存字符(与vector相似)支持随机访问中间位置添加删除元素很慢。在尾部插入删除速度快
deque双端队列支持快速随机访问头尾位置插入/删除速度很快
list双向链表不支持随机访问。只支持双向顺序访问在链表的任何位置插入和删除都很快
forward_list单向链表不支持随机访问。只支持单向顺序访问在链表的任何位置插入和删除都很快
array固定大小数组支持快速随机访问不能添加或删除元素

vector

vector和数组比较?
vector 和 数组 非常相似,但是两者的差别在于空间运用的灵活性。数组是静态空间,定义好大小之后就不能改变;
但是vector是动态空间,随着元素的加入,它的内部机制可动态的增加或减少元素,内存管理自动完成,我们也可以用reserve()来自行管理内存。

vector类有两个成员函数:capacity 和 reserve
capacity:用来获取当前容器可以存储的元素总数
reserve:用来告诉容器应该预留多少个元素的空间。

vector的两个大小概念:
capacity:在容器必须重新分配存储空间之前,当前可以存储的元素总数。当元素个数超过capacity()的时候,就会触发内存重新分配,此时会重新分配一块更大的空间,然后复制元素到新分配的空间里去,然后再释放旧空间
size:当前容易拥有的元素个数。即已经存储的元素个数。
size是当前已有元素大小,capacity是当前可容纳元素大小。

vector迭代器失效的情况:
vector迭代器在内存重新分配的时候将会失效(因为它指向的元素在内存分配的前后不在相同)。
插入元素后,指向当前插入元素的后面的任何元素的迭代器都失效。当插入元素后,元素个数如果超过capacity()时,内存会重新分配,此时所有的迭代器都将失效。
删除元素时,指向被删除元素之后的任何元素的迭代器将会失效。vector是连续存储的,在删除一个元素的时候,后面的元素都要向前移动,所以迭代器的位置就会被前面的覆盖,这个时候++迭代器的时候,就会跳过删除元素的后一个元素。erase会返回删除之后的元素的iterator。


list

list 的内部结构是一个双向环状链表。
不能随机访问一个元素,可以双向遍历,可以动态的增加或减少元素,内存管理自动完成。
增加任何元素都不会使迭代器失效。删除元素时,除了指向当前被删除的迭代器外,其它迭代器都不会失效。


deque

deque 则是一种双开口的连续线性空间。即可以再头尾两端分别做元素的插入和删除操作。
deque 没有容量(capacity)概念,因为它是动态地以分段连续空间组合成的,随时可以增加一段新的空间并链接起来。
随机访问每个元素,所需要的时间为常量。
在开头和末尾增加元素所需时间与元素数目无关,在中间增加或删除元素所需时间随元素数目呈线性变化。
可动态增加或减少元素,内存管理自动完成,不提供内存管理的成员函数

stack

适配器,可以将任意类型的序列容器转换为一个堆栈。

queue

适配器,可以将任意类型的序列容器转换为一个队列。

priority_queue

适配器,可以将任意类型的序列容器转换为一个优先级队列。
只能访问第一个元素,不能编译priority_queue,第一个元素始终是优先级最高的元素。



构造函数作用
C c默认构造函数,构造空容器
C c1(c2)构造c2的拷贝c1
C c(b,e)构造c,将迭代器b和e指定的范围内的元素拷贝到c(array不支持)
C c{a,b,c…}列表初始化c

(1)以vector来举个例子:

#include <iostream>
#include <vector>
using namespace std;
int main(){
	vector<int> vec1;				//默认初始化,vec1为空 
	for(int i = 1;i <= 10;i++){
		vec1.push_back(i);
	} 

	vector<int> vec2(vec1);			//使用vec1初始化vec2
	vector<int> vec3(vec1.begin(),vec1.end());
	vector<int> vec4(10);			//10个值为0的元素 
	vector<int> vec5(10,4); 		//10个值为4的元素 
	 
	cout << (vec1 == vec2) ? true : false;
	cout << "\n";
	cout << (vec1 == vec3) ? true : false;
	return 0;
}

控制台输出:
这里写图片描述

(2)以list来举个例子

#include <iostream>
#include <list>
using namespace std;
int main(){
	list<int> list1;				//创建一个空的list 
	list<int> list2(list1);			//使用list1初始化list2 
	list<int> list3(3);				//创建含有3个元素的list3 
	list<int> list4(10,5);			//创建10个元素为5的list4 
	list<int> list5(list1.begin(),list1.end());	//使用list1初始化list5,同list2 
	
	cout << ((list1 == list2) ? true : false) << endl; 
	return 0;
}
控制台输出:1

(3)特殊的array,具有固定大小。在定义array时,不仅要指定元素类型,还需要指定容器大小。

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

int main(){
	array<int,10> a1;							//10个默认初始化的int
	array<int,10> a2 = {0,1,2,3,4,5,6,7,8,9};	//列表初始化
	array<int,10> a3 = {42};					//a3[0]是42,剩余元素为0 

	//a4 = {0};									//错误:不能将一个花括号列表赋予数组 
	return 0;
}



赋值与swap作用
c1 = c2将c1中的元素替换为c2中的元素
c1 = {a,b,c…}将c1中的元素替换为列表中的元素,不适用于array
a.swap(b)交换a和b的元素
swap(a,b)与a.swap(b)等价

大小作用
c.size()c中元素的数目,不支持forward_list
c.max_size()c可保存在最大元素数目
c.empty()判断c中是否含有元素,有元素返回false,否则返回true

添加删除元素(不适用array)作用
c.insert(args)将args中的元素拷贝进c
c.emplace(inits)适用inits构造c中的一个元素
c.erase(args)删除args指定的元素
c.clear(args)删除c中的所有元素,返回void

(1)vector容器

#include <iostream>
#include <vector>
using namespace std;
int main(){
	vector<int> vec1;				//默认初始化,vec1为空 
	vec1.push_back(1);				//从末尾插入一个元素       		vector中元素:1 
	vec1.insert(vec1.end(),2,3);	//从vec1.end()位置插入2个3		vector中元素:1 3 3
	vec1.insert(vec1.begin(),2,4);	//从vec1.begin()位置插入2个4      vector中元素:4 4 1 3 3

	vec1.pop_back();							//删除末尾元素 	    vector中元素:4 4 1 3 
	vec1.erase(vec1.begin(),vec1.begin()+2);	//删除vec1[0]-vec1[2]之间的元素,不包括vec1[2]
	
	int size = vec1.size();			//得到vector的大小 
	bool isEmpty = vec1.empty();	//判断vector是否为空	
	
	//使用迭代器遍历 
	vector<int>::iterator iter = vec1.begin(); 
	for(;iter != vec1.end();iter++){
		cout << *iter << " ";
	}			
	return 0;
}

(2)list容器
list中的erase的作用是,使作为参数的迭代器失效,并返回指向该迭代器的下一个参数的迭代器

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

int main(){
    list<int> list1;                //创建一个空的list 
    list<int> list2(3);         	//创建含有3个元素的list 
	
	list1.assign(list2.begin(),list2.end());	//分配值,3个值为0的元素 		0 0 0
	list1.push_back(10);						//末尾添加一个值				0 0 0 10
	list1.insert(list1.begin(),3,2);			//从指定位置插入3个值为2的元素  2 2 2 0 0 0 10
	list1.erase(list1.begin());					//使指定位置的迭代器失效        2 2 0 0 0 10 

	list1.assign(list2.begin(),list2.end());	//分配值,会覆盖之前的所有值 	0 0 0
	
	list1.pop_back();							//删除末尾的值	 				0 0  
	list1.clear();								//清空list1的全部值
	list1.erase(list1.begin(),list1.end()); 	//删除元素 

	list1.front();		//返回第一个元素的引用
	list1.back(); 		//返回最后一个元素的引用
	list1.size();
	list1.sort();
	list1.unique();
	
	return 0;
}

反向容器的额外成员(不支持forward_list)作用
reverse_iterator按逆序寻址元素的迭代器
const_reverse_iterator不能修改元素的逆序迭代器
c.rbegin(),c.rend()返回指向c的尾元素和首元素之前位置的迭代器
c.crbegin(),c.crend()返回const_reverse-iterator

(1)每个顺序容器都有一个front成员函数,返回首元素的引用。
(2)除了forward_list,其他的所有顺序容器都有一个back成员函数,返回尾元素的引用。
(3)forward_list不支持递减迭代器,即–操作
(4)at(n) 成员函数,返回下标为n的元素的引用。如果下标越界,则抛出out_of_range异常,只适用于string、vector、deque和array

获取迭代器作用
c.begin(),c.end()返回指向c的首元素和尾元素之后位置的迭代器
c.cbegin(),c.cend()返回const_iterator

关系运算符作用
==,!=相等不等运算符
<,<=,>,>=关系运算符(无序关联容器不支持)

关联容器:关联容器中的元素是按照关键字来保存和访问的。也就是通过键去获得对应的值 。两个主要的关联容器类型是map和set。
map中的元素是关键字-值对,set中的元素只包含一个关键字


有序容器


关联容器类型作用
map关键字-值对
set关键字
multimap关键字可重复出现的map
multiset关键字可重复出现的set
关联容器额外的类型别名作用
key_type此容器类型的关键字类型
mapped_type每个关键字关联的类型,只适用于map
value_type对于set,与key_type相同,对于map,为pair<const key_type,mapped_type>
set<string>::value_type v1;			//v1是一个 string 类型 
set<string>::key_type v2;			//v2是一个 string 类型 
map<string,int>::value_type v3;		//v3是一个 pair<const string,int> 类型 
map<string,int>::key_type v4;		//v4是一个 string 类型 
map<string,int>::mapped_type v5;	//v5是一个 int 类型 

insert(或emplace)进行插入操作的时候,如果容器中已经存在这个关键字,就什么也不做,如果不存在,就进行插入操作,并返回一个pair,告诉我们插入操作是否成功。

#include <iostream>
#include <map>
#include <list>
using namespace std;

int main(){
	map<string,int> map_count;
	
	//向map中添加元素的四种方法 
	map_count.insert({"aaa",1});
	map_count.insert(pair<string,int>("bbb",2));
	map_count.insert(map<string,int>::value_type("ccc",3));
	map_count.insert(make_pair("ddd",4));
	
	return 0;
}

对于map而言,value_type是一个pair类型,其 first 成员保存关键字,second 成员保存值。并且需要通过** ->**来访问 first 和 second 成员的值。我们可以改变 pair 的值,但不能改变关键字成员的值,因为关键字是const 的。 对于set而言,set的迭代器也是const的。
#include <iostream>
#include <map>
#include <list>
using namespace std;

int main(){
	map<string,int> map_count;
	
	//向map中添加元素的四种方法 
	map_count.insert({"aaa",1});
	map_count.insert(pair<string,int>("bbb",2));
	map_count.insert(map<string,int>::value_type("ccc",3));
	map_count.insert(make_pair("ddd",4));
	
	//删除元素
	map_count.erase("aaa");
	
	//通过键去访问 
	cout << map_count["bbb"] << endl;;

	//查找元素
	map_count.find("ccc"); 		//返回一个迭代器,指向第一个关键字为ccc的元素,若ccc不再容器中,则返回尾后迭代器
	map_count.count("ccc");		//返回关键字等于ccc的元素的数量。
	 
	map_count.lower_bound("ccc"); //返回一个迭代器,指向第一个关键字不小于k的元素 
	map_count.upper_bound("ccc"); //返回一个迭代器,指向第一个关键字大于k的元素
	
	//遍历map
	map<string,int>::iterator iter = map_count.begin();
	while(iter != map_count.end()){
		cout << iter->first << " = " << iter->second << endl;
		++iter; 
	} 
	return 0;
}

关联容器

关联容器支持高效的关键字查找和访问。

关联容器类型介绍
按关键字有序保存元素
map关联数组:保存关键字--值
set关键字即值,即只保存关键字的容器
multimap关键字可重复出现的map
multiset关键字可重复出现的set
无序集合
unordered_map哈希函数组织的map
unordered_set用哈希函数组织的set
unordered_multimap用哈希函数组织的map,关键字可重复出现
unordered_multiset用哈希函数组织的set,关键字可重复出现



关联容器额外的类型别名:

key_type
电脑
手机
导管



## pair类型 头文件:`#include ` pair 是用来生成指定类型的模板。 pair 保存两个数据成员。pair的数据成员是public的。两个成员分别命名 first 和 second。 pair 的`默认构造函数`对数据成员进行初始化。

pair作为函数返回值:

pair<string , int> process(std::vector<string> & v)
{
    if(v.empty())
    {
        return pair<string, int>();                 // 构造隐式返回值
    }
    else
    {
    	// make_pair<string , int>(v.back() , (int)v.back().size());
    	// pair<string , int>(v.back() , (int)v.back().size());
        return {v.back() , (int)v.back().size()};        //列表初始化
    }
}

map

map的元素是pair

map不允许两个元素拥有相同的键值。
所有元素会根据元素的键值被自动排序
对元素新增或删除时,操作之前的所有迭代器,在操作完之后都仍然有效被删除的元素的迭代器会失效


multimap

multimap的特性和用法和map完全相同。唯一区别就是multimap允许键值重复


set

所有元素都会根据元素的键值被自动排序。set不允许两个元素有相同的键值
对元素新增或删除时,操作之前的所有迭代器,在操作完之后都仍然有效除了被删除的元素的迭代器

multiset

multiset的特性和用法和set完全相同。唯一区别就是multiset允许键值重复


无序容器

容器的互相比较

顺序容器:vector、deque、stack、queue、priority_queue
关联容器:map、set、multimap、multiset


顺序容器:此处的顺序不是体现在元素的值的顺序,而是指的是元素加入容器时的位置顺序相对应的。
关联容器:关联容器中的元素是按照关键字来保存和访问的。也就是通过键去获得对应的值


顺序容器和关联容器的差别?
顺序容器:为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖元素的值,而是与元素加入容器时的位置相对应。
关联容器通过键存储和读取元素,顺序容器通过元素在容器中的位置顺序存储和访问元素


string和vector相似的地方?
string 和 vector 都是将元素存储在连续的内存空间中。由于元素是连续存储的,由元素的下标来计算地址是非常快的。
但是,在这两种容器的中间位置添加或者删除元素就会非常耗时。在一次插入或删除操作后,需要移动插入/删除位置之后的所有元素,来保持连续存储。如果添加一个元素,导致需要重新分配存储空间进行存储的时候,需要把所有元素都移动到新的存储空间中。


list 和 forward_list
list 和 forward_list 设计目的是令容器任何位置的添加和删除操作都很快速。
但是,这两个元素不支持随机访问,为了访问一个元素,只能遍历整个容器。
并且




迭代器

迭代器范围:一个迭代器范围由一对迭代器表示,两个迭代器分别指向同一个容器中的首元素或者尾元素之后的位置。这两个迭代器分别叫做begin和end,它们标记了容器中元素的一个范围[begin,end)。


顺序容器类型别名作用
iterator此容器类型的迭代器类型
const_iterator可以读取元素,但不能修改元素的迭代器类型
size_type无符号整数类型,足够保存此容器类型最大可能容器的大小
defference_type带符号整数类型,足够保存两个迭代器之间的距离
value_type元素类型
reference元素的左值类型,与value_type&含义相同
const_reference元素的const左值类型,即const value_type&

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 容器详解 的相关文章

  • c# 设置代理服务器发送http请求

    span class token keyword using span span class token namespace System span span class token punctuation span span class
  • Blaze:高性能C++数学库

    Blaze xff1a 高性能C 43 43 数学库 本文译自 xff1a Blaze A high performance C 43 43 math library Blaze是一个用于密集和稀疏算法的开源 高性能 C 43 43 数学库
  • c/c++编译:使用CMAKE进行跨平台开发

    前言 本文介绍跨平台cmake的编写 xff0c 主要是linux和windows用cmake对项目的编译 这是一个通用模板 xff0c 能够应用到更加复杂的项目中 xff0c 项目例子用https blog csdn net qq 364
  • 对于应用层HTTP协议的学习

    lt start gt 在TCP IP协议栈中 xff0c HTTP协议处于应用层 xff0c 它在最顶层进行数据报转发给应用进程 xff0c 它是最靠近用户的那一层 它的默认端口号为80 HTTP协议是基于请求响应的协议 xff0c 那么
  • 编程开发环境搭建

    全部目录 下载 amp 安装官方下载Vs2019其它历史 版本下载 开始使用安装C 43 43 的工作负载 xff08 环境 xff09 打开vs后有这些模板创建出一个控制台应用程序更多参考文档 使用手册c 43 43 参考手册Visual
  • c++创建第一个控制台程序

    目录 创建控制台应用程序打印出Hello World 空项目创建vs自带打印的创建桌面向导 自定义创建 了解代码 抛转引玉减少为什么 什么是 include 它是预处理指令什么是iostream 它是c 43 43 标准库头件 编写前的了解
  • python3-操作SQLite、创建表、添加数据、查询数据

    SQLlte数据类型 SQLite能保存什么样的数据类型 可以保存空值 整数 浮点数 字符串和blob 什么是blob xff1f xff1f 是二进制大对象 例如图片 音乐 zip文件 什么是游标 游标是在数据库中用来移动和执行查询的对象
  • 初学者都能看懂的95%置信区间

    项目github地址 xff1a bitcarmanlee easy algorithm interview and practice 经常有同学私信或留言询问相关问题 xff0c V号bitcarmanlee github上star的同学
  • c# WindowForm练习项目主窗体设计

    窗体分割器 SpliContainer分割器 在项目主窗体分割成左右俩部分 设置边框线属性 MonthCalendar月历控件 添加程序所需要的按钮 退出 修改密码 添加会员 按钮 固定好左边的容器 组件 ImageList 按钮太多添加图
  • C#-WinForm班级下拉框数据绑定

    前台展示 后台方法 span class hljs keyword using span System span class hljs keyword using span System Collections Generic span c
  • C#--WinForm项目主窗体设计

    主窗体基本设置 大小 颜色 去边框 出现的位置 Panel控件 背景图 颜色 布局 xff1a Label标签 文本 字体 背景颜色 布局 按钮 布局 文本 字体颜色 背景色 底部panel 绑定控件边框 颜色 用label标签导入图标 S
  • C# -- 实现WinForm程序的密码修改

    修改窗体程序密码的示例 实现分析 前台弹出修改窗体 编写后台方法 xff0c 调用通用数据访问类Update方法 数据验证 xff0c 判断原密码是否与旧密码符合 xff0c 俩次输入的新密码是否一致 更新程序全局变量 前台弹出修改窗体 编
  • C#--WinForm--表格数据控件DataGridView--绑定模式

    官方文档 DataGridView控件提供了一种强大而灵活的以表格形式显示数据的方式 用户可以使用DataGridView控件来显示少量数据的只读视图 xff0c 也可以对其进行缩放以显示特大数据集的可编辑视图 扩展DataGridView
  • ASP.NET--网站配置、发布与部署

    网站发布前的配置信息 配置文件下载 网站发布的基本步骤 写好的项目 在本机上发布 打开目录查看 xff1a 部署网站 安装IIs 打开控制面板 程序和功能 启用或关闭Windows功能 安装后 返回控制面板 管理工具 双击打开 xff1a
  • c/c++ hash表 (哈希表、字典表)

    表 1 表 存储数据 key gt value 2 表存储数据结构的困难 怎么查找 一个一个key去比较去查找 xff1f 61 61 效率不高 3 Hash算法加快查找 将字符串的key 转成整数 使用整数找到对应的value Hash算
  • c/c++ UDP通讯

    UDP通讯 1 无连接的 不需要反复的确认和握手等待 根本不关心对方是否存在 2 不可靠 可能有丢包 和先发后到 3 UDP通讯快速 占用系统资源少 4 UDP提供作为传输层协议的最基本功能 将其他的交给用户自己来管理 UDP服务端 1 创
  • c#程序流程控制与调试技术

    If选择结构 为什么要使用关系运算符 简单If 选择结构1 逻辑运算符
  • 特征融合之基于贝叶斯理论的特征融合算法

    参考文献 xff1a 1 刘渭滨 邹智元 邢薇薇 模式分类中的特征融合方法 J 北京邮电大学学报 2017 04 5 12 2 Ma A J Yuen P C Lai J H Linear Dependency Modeling for C
  • 初学者都能看懂的蒙特卡洛方法以及python实现

    项目github地址 xff1a bitcarmanlee easy algorithm interview and practice 经常有同学私信或留言询问相关问题 xff0c V号bitcarmanlee github上star的同学
  • postman安装包

    postman34位和64位安装包 xff0c 访问API 下载地址 xff1a 链接 xff1a https pan baidu com s 1p 830DPPKumXiwMPVtKYsw 提取码 xff1a 8p6k

随机推荐

  • STM32入门:STM32F401CDU6库函数工程文件搭建

    STM32F401CDU6库函数工程文件搭建 根据下图的结构进行复制粘贴操作 xff0c 代码部分在本文末有贴出来 xff0c STM32F4xx DSP StdPeriph Lib V1 8 0文件下载 xff08 使用part1即可 x
  • 减小vscode-cpptools的内存占用

    在VScode菜单栏文件 gt 首选项 gt 设置 搜索C Cpp intelliSenseCacheSize 修改默认的5120为512
  • Ubuntu20.04 安装tcp调试工具mNetAssist步骤

    概述 在Ubuntu20 04上安装一个比较好用的网络调试助手mNetAssist 下载链接 mNetAssist链接 提取码 vrsm 安装 进入文件 mNetAssist release amd64 deb的所在文件夹 xff0c 然后
  • 页面加载时,添加进度条,提高用户体验

    这几个月做了个项目 xff0c 在此对一些问题做一个记录 项目是前后端分离的 xff0c 前端用的 npm 43 webpack 问题 xff1a 由于系统某页面数据量过大或网络较差等原因 xff0c 导致页面还未完全加载出来 xff0c
  • matlab绘制三维图像,用ga工具箱求解有约束的优化问题(接力遗传算法)

    绘制目标函数图像 目标函数的图像绘制为 xff08 未考虑约束条件 xff09 画法1代码 有约束的三维函数图像绘制 x1 61 10 1 10 x2 61 6 1 6 x1 x2 61 meshgrid x1 x2 f 61 exp x1
  • 多元线性回归 stata

    文章目录 回归的思想 xff0c 任务 xff0c 使命 xff0c 分类线性回归一定只能用于有线性关系的变量吗数据的分类数据的标准化处理最小二乘法拟合一元线性回归方程的几个结论回归系数的解释遗漏变量会造成内生性 xff08 扰动项和变量相
  • C++编译报错:||error: ld returned 1 exit status|

    这个问题我遇到过三次了 xff0c 每次好像原因都不一样 xff0c 在网上看到很多博客都记录了这个问题 xff0c 每人原因也都不同 xff0c 所以可以有多种原因都引发这个错误 但我不懂ld returned 1 exit status
  • C++ day34 异常(三)异常规范,未捕获异常,意外异常,异常导致内存泄漏

    文章目录 异常规范 xff08 C 43 43 98添加 xff0c C 43 43 11已摒弃 xff0c 不建议使用 xff09 异常规范的作用 xff08 正是这俩作用的鸡肋和难办使它失去了粉丝 xff09 C 43 43 11支持的
  • C++ day37 标准模板库STL初识

    文章目录 简介是什么 xff1a 容器类模板 xff0c 迭代器类模板 xff0c 函数对象模板 xff0c 算法模板的集合STL不是面向对象编程 xff0c 而是泛型编程 xff01 历史 xff1a 1994年发布 模板类vector示
  • STM32烧录 Error:Flash Download Failed-“Cortex-M3“ 解决方案—ST-Link调试

    STM32烧录 Error Flash Download Failed 34 Cortex M3 34 解决方案 ST Link调试 开发环境介绍设置步骤1 于Device中选择与你的开发板相匹配的芯片 xff0c 一般主芯片上都有标注2
  • SQL (十四)插入数据(insert语句,把数据插入表中)

    文章目录 插入完整的行 xff1a values子句不安全写法安全写法 xff1a 在表名后的括号明确给出列名小结 插入行的一部分 xff1a 简单插入某些查询的结果 xff08 即检索出的数据 xff09 xff1a insert sel
  • 模2除法(CRC冗余码计算)和二进制/十进制除法

    文章目录 CRC循环冗余检验 xff1a 余数为0就没出错 xff1b 不能确定哪几个比特出错了二进制除法 xff08 和十进制除法其实一样 xff01 xff09 模2除法 xff08 不同于二进制除法 xff01 本质就是异或而已 xf
  • latex超链接Argument of \Hy@setref@link has an extra }.错误解决

    用了 usepackage url 来在文章中写了超链接 xff0c 如 url https www baidu com 但是直接编译后没有颜色 xff0c 就是黑色的 xff0c 参考文献也是黑色的 加入下面两句代码可以让超链接显示出颜色
  • 希捷移动硬盘更换文件系统(exfat vs NTFS)

    毕业资料多 xff0c 专门买了个移动硬盘 xff0c 希捷的 2T 第一次买移动硬盘 xff0c 以为和常规U盘一样 xff0c 买来没仔细看说明书就直接用上了 xff0c 但是使用过程中老出问题 xff0c 比如从featurize平台
  • LPWAN——Sigfox实战经验介绍

    0 序 最近半年的时间一直在从事这方面的开发工作 xff0c 到目前为止对于Sigfox有一定想法和经验 xff0c 同时目前国内对于该技术的使用和应用还处在刚刚起步的阶段 xff0c 很多博客对Sigfox的讲解是一个浅尝辄止的介绍 xf
  • 拉格朗日乘子法详解(Lagrange multiplier)

    最近在视频的变换编码里推导最优变换 xff08 KL变换 xff09 时需要用拉格朗日乘子法 xff0c 之前在机器学习的各种优化问题里也要用到这个方法 xff0c 特此仔细钻研一番 xff0c 总结如下 xff1a 注 xff1a 这篇博
  • MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)

    文章目录 基础知识规划问题的数学模型的三个要素解 线性规划Linear Programing理论示例 整数规划理论示例 非线性规划理论示例 生产实践中 xff0c 经常会遇到很多资源分配的问题 xff0c 如何分配各种资源以获得最大经济效益
  • matlab画三维图像(plot3,mesh,surf)

    二维函数的图像必须用三维坐标系画 xff0c 很多函数的图像长得很好看 xff0c 很有意思 会可视化也会有利于我们理解更深刻 xff08 1 xff09 plot3 三维曲线图 在网上看到这图觉得挺好看 xff1a t 61 0 pi 3
  • 智能小车学习笔记

    教程 视频教程 xff1b 资源网站 xff1b 可以获取模块的基础资料 xff1b 有刷电机有损耗 电机选型考虑 xff1a 转速和额定电压 xff1b 电机的力矩 xff0c 减速电机减速箱的作用 xff1a 减速 增大力矩 xff08
  • C++ 容器详解

    顺序容器vectorlistdequestackqueuepriority queue 关联容器mapmultimapsetmultiset 无序容器容器的互相比较迭代器 顺序容器 顺序容器类型特点vector可变大小数组支持快速随机访问