STL学习心得

2023-05-16

STL概述

STL组件

1.容器(Container) - 管理某类对象的集合
2.迭代器(Iterator) - 在对象集合上进行遍历
(注意:这些集合可能是容器,也可能是容器的子集。)
3.算法(Algorithm) - 处理集合内的元素,算法作用于容器。(算法提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。)
4.容器适配器(container adaptor)
5.函数对象(functor)
在这里插入图片描述
(注意:STL容器的共同能力:
1.所有容器中存放的都是值而非引用。如果希望存放的不是副本,容器元素只能是指针。
2.所有元素都形成一个次序(order),可以按相同的次序一次或多次遍历每个元素)

STL类别

1.序列式容器-排列次序取决于插入时机和位置
在这里插入图片描述
2.关联式容器-排列顺序取决于特定准则
在这里插入图片描述

STL容器元素的条件

1.必须能够通过拷贝构造函数进行复制
2.必须可以通过赋值运算符完成赋值操作
3.必须可以通过析构函数完称销毁动作
4.序列式容器元素的默认构造函数必须可用
5.某些动作必须定义 operator==,例如搜寻操作
6.关联式容器必须定义出排序准则,默认情况是重载operator <
(对于基本数据类型(int,long,char,double,…)而言,以上条件总是满足)

STL容器的共同操作

初始化

1.产生一个空容器
std::list l;
2.以另一个容器元素为初值完成初始化
std::list l;

std::vector c(l.begin(),l.end())
3.以数组元素为初值完成初始化
int array[]={2,4,6,1345};

std::set c(array,array+sizeof(array)/sizeof(array[0]));

与大小相关的操作

1.size()-返回当前容器的元素数量
2.empty()-判断容器是否为空
3.max_size()-返回容器能容纳的最大元素数量

比较

1.==,!=,<,<=,>,>=
2.比较操作两端的容器必须属于同一类型
3.如果两个容器内的所有元素按序相等,那么这两个容器相等
4.采用字典式顺序判断某个容器是否小于另一个容器

赋值和交换

swap用于提高赋值操作效率

与迭代器相关的操作

1.begin()-返回一个迭代器,指向第一个元素
2.end()-返回一个迭代器,指向最后一个元素之后
3.rbegin()-返回一个逆向迭代器,指向逆向遍历的第一个元素
4.rend()-返回一个逆向迭代器,指向逆向遍历的最后一个元素之后

元素操作

1.insert(pos,e)-将元素e的拷贝安插于迭代器pos所指的位置
2.erase(beg,end)-移除[beg,end]区间内的所有元素
3.clear()-移除所有元素

迭代器

1.可遍历STL容器内全部或部分元素的对象
2.指出容器中的一个特定位置
3.迭代器的基本操作
在这里插入图片描述
在这里插入图片描述

迭代器分类

1.双向迭代器
可以双向行进,以递增运算前进或以递减运算后退、可以用==和!=比较。
list、set和map提供双向迭代器

list<int> l; 
for(pos=l.begin();pos!=l.end();++pos{}

2.随机存取迭代器
除了具备双向迭代器的所有属性,还具备随机访问能力。
可以对迭代器增加或减少一个偏移量、处理迭代器之间的距离或者使用<和>之类的关系运算符比较两个迭代器。
vector、deque和string提供随机存取迭代器

vector<int> v; 
for(pos=v.begin();pos<v.end();++pos{}

vector

1.vector模拟动态数组
2.vector的元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public拷贝构造函数和重载的赋值操作符)
3.必须包含的头文件#include
4.vector支持随机存取
5.vector的大小(size)和容量(capacity)
(1)size返回实际元素个数,
(2)capacity返回vector能容纳的元素最大数量。如果插入元素时,元素个数超过capacity,需要重新配置内部存储器。
在这里插入图片描述

非变动操作

在这里插入图片描述

赋值操作

在这里插入图片描述
(注意:所有的赋值操作都有可能调用元素类型的默认构造函数,拷贝构造函数,赋值操作符和析构函数)

元素存取

在这里插入图片描述

迭代器相关函数

在这里插入图片描述
(注意: 迭代器持续有效,除非发生以下两种情况:
(1)删除或插入元素
(2)容量变化而引起内存重新分配)

安插元素

在这里插入图片描述

移除元素

在这里插入图片描述

map/multimap

概述

1.使用平衡二叉树管理元素
2.元素包含两部分(key,value),key和value可以是任意类型
3.必须包含的头文件#include
4.根据元素的key自动对元素排序,因此根据元素的key进行定位很快,但根据元素的value定位很慢
5.不能直接改变元素的key,可以通过operator []直接存取元素值
6.map中不允许key相同的元素,multimap允许key相同的元素

构造、拷贝和析构

在这里插入图片描述
(注意:其中map可以是下列形式:
map<key,value> 一个以less(<)为排序准则的map,
map<key,value,op> 一个以op为排序准则的map)

非变动性操作

在这里插入图片描述

赋值

在这里插入图片描述

特殊搜寻操作

在这里插入图片描述

迭代器相关函数

在这里插入图片描述

安插元素

在这里插入图片描述

移除元素

在这里插入图片描述

set/multiset

概述

1.使用平衡二叉树管理元素
2.集合(Set)是一种包含已排序对象的关联容器。
3.必须包含的头文件#include
4.map容器是键-值对的集合,好比以人名为键的地址和电话号码。相反地,set容器5.只是单纯的键的集合。当我们想知道某位用户是否存在时,使用set容器是最合适的。
6.set中不允许key相同的元素,multiset允许key相同的元素

基本操作

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

算法

泛型算法通则

1.所有算法的前两个参数都是一对iterators:[first,last),用来指出容器内一个范围内的元素。
2.每个算法的声明中,都表现出它所需要的最低层次的iterator类型。

count

size_t count(InIt first, InIt last, const T& val);
计算[first,last) 中等于val的元素个数

count_if

size_t count_if(InIt first, InIt last, Pred pr);

计算[first,last) 中符合pr(e) == true 的元素 e的个数

min_element

template
FwdIt min_element(FwdIt first, FwdIt last);

返回[first,last) 中最小元素的迭代器,以 “< ”作比较器

max_element

template
FwdIt max_element(FwdIt first, FwdIt last);

返回[first,last) 中最大(不小)元素的迭代器,以 “< ”作比较器

for_each

Fun for_each(InIt first, InIt last, Fun f);

对[first,last)中的每个元素 e ,执行 f(e) , 要求 f(e)不能改变e

find

template<class InIt, class T>
InIt find(InIt first, InIt last, const T& val);

返回区间 [first,last) 中的迭代器 i ,使得 * i == val

find_if

template<class InIt, class Pred>
InIt find_if(InIt first, InIt last, Pred pr);
返回区间 [first,last) 中的迭代器 i, 使得 pr(*i) == true

binary_search

(折半查找,要求容器已经有序且支持随机访问迭代器,返回是否找到)
1.template<class FwdIt, class T>
bool binary_search(FwdIt first, FwdIt last, const T& val);
上面这个版本,比较两个元素x,y 大小时, 看 x < y

2.template<class FwdIt, class T, class Pred>
bool binary_search(FwdIt first, FwdIt last, const T& val, Pred pr);
上面这个版本,比较两个元素x,y 大小时, 看 pr(x,y)

lower_bound,uper_bound, equal_range

lower_bound:
template<class FwdIt, class T>
FwdIt lower_bound(FwdIt first, FwdIt last, const T& val);

要求[first,last)是有序的,
查找大于等于val的最小的位置
uper_bound
template<class FwdIt, class T>
FwdIt upper_bound(FwdIt first, FwdIt last, const T& val);
要求[first,last)是有序的,
查找大于val的最小位置
equal_range
template<class FwdIt, class T>
pair<FwdIt, FwdIt> equal_range(FwdIt first, FwdIt last, const T& val);

要求[first,last)是有序的,
返回值是一个pair, 假设为 p, 则
[first,p.first) 中的元素都比 val 小
[p.second,last)中的所有元素都比 val 大

sort 快速排序

template
void sort(RanIt first, RanIt last);
按升序排序。判断x是否应比y靠前,就看 x < y 是否为true

template<class RanIt, class Pred>
void sort(RanIt first, RanIt last, Pred pr);
按升序排序。判断x是否应比y靠前,就看 pr(x,y) 是否为true

unique(改变序列)

1.template
FwdIt unique(FwdIt first, FwdIt last);
用 == 比较是否相等
2.template<class FwdIt, class Pred>
FwdIt unique(FwdIt first, FwdIt last, Pred pr);
用 pr 比较是否等

去除[first,last) 这个升序序列中的重复元素
返回值是迭代器,指向元素删除后的区间的最后一个元素的后面

reverse

template
void reverse(BidIt first, BidIt last);

颠倒区间[first,last)顺序

注意的点

1.push_back( ) 成员函数在向量的末尾插入值,如果有必要会扩展向量的大小。
2.size( ) 函数显示向量的大小。
3.begin( ) 函数返回一个指向向量开头的迭代器。
4.end( ) 函数返回一个指向向量末尾的迭代器。
5. string 中的 find函数

 if(s1.find(s2)!=string::npos)  注意 其查找 是以s1的任何起点去找是否存在s2  如果是查找前缀字符串(一个字符串是另一个字符串的前缀)  如果这样找就可能超时

6.有时候出现弹窗 cannot read vs2005 是有提示的 而vc6是不提示的 原因之一可能是由于使用了没有赋值的变量导致指针乱飘了

一些实际应用

单个元素的查找

find() 比较条件为相等的查找

find()从给定区间中查找单个元素,定义:


int myints[] = { 10, 20, 30, 40 };
std::vector<int> myvector (myints,myints+4);
it = find (myvector.begin(), myvector.end(), 30);
if (it != myvector.end())
    std::cout << "Element found in myvector: " << *it << '\n';
else
    std::cout << "Element not found in myvector\n"

find_if() 自定义比较函数

std::find_if():从给定区间中找出满足比较函数的第一个元素;
示例,从myvector中查找能够被30整除的第一个元素:

bool cmpFunction (int i) {
  return ((i%30)==0);
}
it = std::find_if (myvector.begin(), myvector.end(), cmpFunction);
std::cout << "first:" <<  *it <<std::endl;

利用find_if()函数结合map实现模糊查找

(注意:重载运算符是重点!!!)
首先对find_if函数的谓词函数进行改造:

template<class InIt, class Pred> 
InIt find_if(InIt first, InIt last, Pred pr); 

然后构造一个类,并重载函数运算符,在其内部实现取子串查找:

class map_value_finder
{
public:
	map_value_finder(const string& cmp_string) :m_s_cmp_string(cmp_string) {}
	bool operator ()(const multimap<string,int>::value_type& pair)
	{
		int loc;
		loc=pair.first.find(m_s_cmp_string);
		if (loc != pair.first.npos)
			return true;
		return false;
	}
private:
	const std::string& m_s_cmp_string;
};
void Operation::fuzzyFindBname(string str)
{
	multimap<string, int>::iterator it,p1,p2,p;
	p1 = bookname.begin();
	p2 = bookname.end();

	it = find_if(p1, bookname.end(), map_value_finder(str));
	if (it == bookname.end())
		return;
	else
		cout << book[it->second];
	it++;
	for (p = it; p != p2; p++)
	{
		it = find_if(p, bookname.end(), map_value_finder(str));
		if (it == bookname.end())
			return;
		else
			cout << book[it->second];
	}
	
}

vector巧用swap收缩内存空间

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

int main(){

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

	cout << "capacity:" << v.capacity() << endl;
	cout << "size:" << v.size() << endl;

	//此时 通过resize改变容器大小
	v.resize(10);

	cout << "capacity:" << v.capacity() << endl;
	cout << "size:" << v.size() << endl;

	//容量没有改变
	vector<int>(v).swap(v);

	cout << "capacity:" << v.capacity() << endl;
	cout << "size:" << v.size() << endl;


	system("pause");
	return EXIT_SUCCESS;
}

set的返回值

//插入操作返回值
void test01(){

	set<int> s;
	pair<set<int>::iterator,bool> ret = s.insert(10);
	if (ret.second){
		cout << "插入成功:" << *ret.first << endl;
	}
	else{
		cout << "插入失败:" << *ret.first << endl;
	}
	
	ret = s.insert(10);
	if(ret.second){
		cout << "插入成功:" << *ret.first << endl;
	}
	else{
		cout << "插入失败:" << *ret.first << endl;
	}

}

struct MyCompare02{
	bool operator()(int v1,int v2){
		return v1 > v2;
	}
};
//从大到小排序
void test02(){

	srand((unsigned int)time(NULL));
	//我们发现set容器的第二个模板参数可以设置排序规则,默认规则是less<_Kty>
	set<int, MyCompare02> s;
	for (int i = 0; i < 10;i++){
		s.insert(rand() % 100);
	}
	
	for (set<int, MyCompare02>::iterator it = s.begin(); it != s.end(); it ++){
		cout << *it << " ";
	}
	cout << endl;
}

学习心得

这一段时间我们学习了STL,感受就是既简单又复杂,说简单是因为STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用,方便了我们的使用,使一些复杂问题可以通关简单的手段就能实现。说复杂是因为较难理解,有些地方比较绕,较难理解。有的时候理解了,运用到实例中时,却常常感到无从下手。近几天的学习状态不是很好,每天都感觉自己很忙,但是晚上入睡前回想总是感觉自己这一天啥也没干,啥也不是,状态很是浮躁。最近一段时间的生物钟也挺乱的,每天都不能按时吃饭睡觉,导致每天精神欠佳,迷迷糊糊的,这个星期开始调整自己的作息,找回自己的状态。

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

STL学习心得 的相关文章

  • C++中的字符串类

    字符串类 历史遗留的问题 1 C语言不支持真正意义上的字符串 xff1b 2 C语言用字符数组和一组实现字符串操作 xff1b 3 C语言不支持自定义类型 xff0c 因此无法获得字符类型 xff1b 解决方案 1 从C到C 43 43 的
  • MySQL中的Block Nested Loop优化分析

    前言 一般在MySQL规范中 xff0c 都会规定如果两张表进行join查询 xff0c 那么join的字段一定要有索引 xff0c 在之前的文章中我们分析了MySQL join大小表前后顺序影响分析 xff0c 这是在有索引的情况下 xf
  • C++之类模板的概念和意义

    类模板 一些类主要用于存储和组织数据元素 类中数据组织的方式和数据元素的具体类型无关 如 xff1a 数组类 链表类 Stack Queue类 等 1 C 43 43 中将模板的思想应用于类 xff0c 使得类的实现不关注数据元素的具体类型
  • C++之单例类模板

    需求的提出 在架构设计时 xff0c 某些类在整个系统生命周期中最多只能有一个对象存在 xff08 Single Instance xff09 要控制类的对象数目 xff0c 必须对外隐藏构造函数 xff1b 思路 xff1a 1 将构造函
  • 【无标题】

    绘图控件GraphicsView 一 GraphicsView简介 1 QT有多种绘图相关的技术 xff0c 我们将在第2部分 2 4 QT绘图和图表 中比较详细系统的讲 2 本节简单讲一下GraphicsView的基本理论 xff0c 并
  • uboot源码分析之start.S解析

    1 start S引入 1 1 u boot lds中找到start S入口 1 在uboot中因为有汇编阶段参与 xff0c 因此不能直接找main c 整个程序的入口取决于链接脚本中ENTRY声明的地方 ENTRY start 因此 s
  • uboot启动第二阶段

    uboot启动第二阶段 start armboot函数简介 一个很长的函数 1 这个函数在uboot lib arm board c的第444行开始到908行结束 2 450行还不是全部 xff0c 因为里面还调用了别的函数 3 为什么这么
  • cmake设置编译类型为release命令

    cmake编译类型通常默认为debug xff0c 但是在编译软件时 xff0c 一般都需要使用release版本的 xff0c debug太慢了 设置为release版本可以在cmake文件里进行 xff0c 也可以在运行cmake命令时
  • 设计模式之单例模式(Singleton),以C++为例,实现日志输出。

    Hello大家好 xff0c 好久没更新了 xff0c 今天给大家补上最基础的设计模式 xff1a 单例模式 这个单例模式实在是我的心结啊 xff0c 2021年末左右面试京东算法岗 xff0c 面试官让我写一个单例 xff0c 没写出来
  • 源码分析MyBatis对数值(int、double)类型进行test判断的误区

    文章目录 问题描述问题分析验证解析表达式执行解析后表达式分别测试两个条件 查询Ognl官方文档验证问题解决 问题描述 在如下判断中 xff0c 如果type类型为int xff0c 那么对于type 61 39 39 部分判断会出现一些问题
  • Git报错:error: xxxx bytes of body are still expected.

    git一个很老的项目 xff0c 项目深度很深 xff0c 报错 xff1a error 7857 bytes of body are still expected fetch pack unexpected disconnect whil
  • 设计模式之代理模式(Proxy),以C++为例,实现远程代理、虚拟代理、保护代理等。

    兄弟姐妹们好 xff0c 又是好久没有更新了 xff0c 今天给大家简单介绍代理模式 xff0c 一个很简单的设计模式 xff0c 旨在不改变原对象的情况下通过代理对象来控制对原对象的访问 代理模式根据具体情况还可以分为远程代理 虚拟代理
  • C++ 互斥锁原理以及实际使用介绍

    兄弟姐妹们 xff0c 我又回来了 xff0c 今天带来实际开发中都需要使用的互斥锁的内容 xff0c 主要聊一聊如何使用互斥锁以及都有哪几种方式实现互斥锁 实现互斥 xff0c 可以有以下几种方式 xff1a 互斥量 xff08 Mute
  • 【C++】使用【windwos api】获取windwos计算机的基本信息

    今天来一篇获取windows计算机的基本信息的文章 xff0c 包含计算机名称 操作系统版本 处理器信息 内存信息 硬盘信息 显示器信息 网络信息 驱动程序信息 电源信息 其他硬件信息 目录 一 windwos系统包含的基本信息 二 获取信
  • C++ POCO库的基础介绍(Windwos和Linux)

    简单介绍C 43 43 POCO库能干什么 xff0c 后续有时间的话将根据其每个点详细解析 xff0c 关注我 本篇包含POCO库简单介绍 下载以及安装方式 简单代码示例 目录 一 POCO简单介绍 1 1 POCO库的基本模块 1 2
  • ROS踩坑记录

    ROS踩坑记录 问题 xff1a ubuntu 没有 dev ttyUSB0问题 xff1a 运行 launch 文件或 ROS 节点时出现 exit code 9 错误提示问题 xff1a windows使用vscode远程连接 xff0
  • STM32串口数据接收 --环形缓冲区

    STM32串口数据接收 环形缓冲区 环形缓冲区简介 在单片机中串口通信是我们使用最频繁的 xff0c 使用串口通信就会用到串口的数据接收与发送 xff0c 环形缓冲区方式接收数据可以更好的保证数据丢帧率第 在通信程序中 xff0c 经常使用
  • 如何设计安全可靠的开放接口---对请求参加密保护

    文章目录 如何设计安全可靠的开放接口 系列前言AES加解密代码实现 如何设计安全可靠的开放接口 系列 1 如何设计安全可靠的开放接口 之Token 2 如何设计安全可靠的开放接口 之AppId AppSecret 3 如何设计安全可靠的开放
  • rosdep init报错解决方法

    rosdep init报错解决方法 很多小伙伴在安装ROS的过程中都不可避免的要执行rosdep init和rosdep update这两行命令行 xff0c 这也是在安装ROS的过程中最让人头疼的两步 xff0c 一般都没法一次成功 xf
  • NVIDIA Jetson Nano/Xavier NX 扩容教程

    在售的 NVIDIA Jetson 内置 16 GB 的 eMMC xff0c 并已安装了 ubuntu 18 04 LTS 和 NVIDIA JetPack 4 6 xff0c 所以剩余的用户可用空间大约 2GB xff0c 这对将 NV

随机推荐

  • 深度学习框架YOLOv3的C++调用

    深度学习框架YOLOv3的C 43 43 调用 深度学习框架YOLOv3的C 43 43 调用 xff08 1 xff09 tensorflow版本的YOLOv3的C 43 43 调用 xff08 失败 xff09 xff08 2 xff0
  • 基于GPT-2实现图像文本生成

    原理 使用GPT 2模型处理文本 xff0c 做decoder 使用google的vit base patch16 224模型处理图像 xff0c 做encoder 最后通过VisionEncoderDecoderModel将这两个模型粘起
  • C语言中常见的两个比较字符串是否相等的函数strcmp和strncmp

    函数 xff1a strcmp和strncmp strcmp 使用格式 xff1a include lt string h gt int strcmp const char s1 const char s2 设这两个字符串为str1 xff
  • sprintf和printf 用法的区别

    printf 的作用是标准化输出 xff0c 默认的对象是标准输出缓冲区 xff0c 要有一定的条件才能把缓冲区里面的数据输出 sprintf 作用是格式化输出函数 xff0c 保存字符串到缓冲区中 xff0c 起到拼接字符串的作用 功能
  • 第六篇,STM32脉冲宽度调制(PWM)编程

    1 PWM概念 PWM叫脉冲宽度调制 Pulse Width Modulation xff0c 通过编程控制输出方波的频率和占空比 高低电平的比例 xff0c 广泛应用在测量 xff0c 通信 xff0c 功率控制等领域 呼吸灯 xff0c
  • 第十篇,STM32串口蓝牙编程

    1 串口蓝牙概念 串口蓝牙是一个蓝牙模块 xff0c 内部有蓝牙模块和程序 xff0c 可以进行蓝牙通信 xff0c 同时提供一个串口接口 xff0c 通过串口可以配置蓝牙模块进行数据传输 2 使用串口3连接蓝牙模块 3 手机上安装蓝牙调试
  • LeetCode岛屿问题通用解决模板

    文章目录 前言第一题 xff1a 求岛屿的周长模板整理遍历方向确定边界重复遍历问题处理 模板解第一题第二题 xff1a 求岛屿数量第三题 xff1a 岛屿的最大面积第四题 xff1a 统计子岛屿第五题 xff1a 统计封闭岛屿的数目第六题
  • 第十四篇,STM32的CAN总线通信

    1 CAN总线的概念 CAN指的是控制器局域网网络 Controller Area Network xff0c 由德国博世汽车电子厂商开发出来 CAN使用差分信号 xff0c 具有较强的抗干扰能力和传输稳定性 CAN属于多主通信 xff0c
  • OpenCV图像处理学习十九,像素重映射cv::remap

    一 像素重映射概念 重映射就是把输入图像中各个像素按照制定的规则顺序映射到另外一张图像的对应位置上去 xff0c 形成一张新的图像 二 像素映射API函数接口 cv remap xff08 InputArray src 输入图像 Outpu
  • OpenCV图像处理学习二十一,直方图比较方法

    一 直方图比较 直方图比较是对输入的两张图像进行计算得到直方图H1与H2 xff0c 归一化到相同的尺度空间 xff0c 然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度 xff08 每张图像都有唯一的直方图与之对应 xff0
  • 嵌入式FreeRTOS学习九,任务链表的构成,TICK时间中断和任务状态切换调度

    一 tskTaskControlBlock 函数结构体 在tskTaskControlBlock 任务控制块结构体中 xff0c 其中有任务状态链表和事件链表两个链表成员 xff0c 首先介绍任务状态链表这个结构 xff0c 这个链表通常用
  • SOAP传输协议

    一 HTTP传输协议 超文本传输协议 xff08 HyperText Transfer Protocol xff0c 缩写 xff1a HTTP xff09 xff0c 它是基于请求 响应的模式协议 xff0c 客户端发出请求 xff0c
  • ONVIF简介

    一 什么是ONVIF ONVIF规范描述了网络视频的模型 接口 数据类型以及数据交互的模式 并复用了一些现有的标准 xff0c 如WS系列标准等 ONVIF规范的目标是实现一个网络视频框架协议 xff0c 使不同厂商所生产的网络视频产品 x
  • gsoap工具生成onvif设备搜索(remotediscovery)代码框架

    什么是gsoap工具 xff1f gSOAP 提供了两个工具来方便开发人员使用 C C 43 43 语言快速开发Web 服务应用 xff0c 通过 gSOAP 提供的这两个工具 xff0c 开发人员可以快速生成服务端与客户端代码框架 xff
  • Latex之给字符上加横线、波浪等

    Latex 前几天想在 x x x 上加波浪号 xff0c 一时间忘记怎么打 xff0c 现在记录下来 xff0c 以后好查阅 加 号 xff1a hat x 加横线 xff1a overline x 加宽 xff1a widehat x
  • 数据结构笔记-2(线性表)

    线性表 2 1 线性表 1 定义 是零个或多个具有相同类型的数据元素的有序数列 xff1b xff08 长度等于零的线性表为空表 xff09 非空线性表通常记为 xff1a L xff1d a 1 xff0c a 2 xff0c xff0c
  • 数据结构-6(图)

    图 图的逻辑结构 图的定义 xff1a 图是由顶点的有穷非空集合和顶点之间边的集合组成 xff0c 通常表示为 xff1a G 61 V xff0c E 其中 xff1a G表示一个图 xff0c V是图G中顶点的集合 xff0c E是图G
  • 【leetcode常见面试题】螺旋矩阵解题思路

    文章目录 螺旋矩阵解题思路先找行进路线找每条路线的结束位置再找每条路线的结束位置模拟行走 螺旋矩阵 II总结 螺旋矩阵 解题思路 本题可以采用模拟的方式 xff0c 设4种行走方向 xff0c 如下图 xff1a 先找行进路线 4个方向的行
  • C++面向对象程序设计学习心得

    C 43 43 面向对象程序设计学习心得 经过几周c 43 43 面向对象程序设计的学习 xff0c 对面向对象程序设计有了一些了解 递归 简单地讲 xff0c 递归就是程序直接或间接调用本身的编程技巧 xff0c 通过把一个不能或不好解决
  • STL学习心得

    STL概述 STL组件 1 容器 xff08 Container xff09 xff0d 管理某类对象的集合 2 迭代器 xff08 Iterator xff09 xff0d 在对象集合上进行遍历 xff08 注意 xff1a 这些集合可能