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

C++之String类(上)

片头

嗨!好久不见~ 今天我们来学习C++的Sting类,不过,在学习它之前,我们先来对STL库有一个简单的了解。

STL(standard template library--标准模板库),是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

STL的版本

  • 原始版本
Alexander Stepanov Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许
任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原
始版本一样做开源使用。 HP 版本 -- 所有 STL 实现版本的始祖。
  • P.J版本
P. J. Plauger 开发,继承自 HP 版本,被 Windows Visual C++ 采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异。
  • RW版本
Rouge Wage 公司开发,继承自 HP 版本,被 C+ + Builder 采用,不能公开或修改,可读性一
般。
  • SGI版本
Silicon Graphics Computer Systems Inc 公司开发,继承自 HP 版 本。被 GCC(Linux) 采用,可
移植性好,可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。 我们后面学习
STL 要阅读部分源代码,主要参考的就是这个版本
STL有六大组件

一、为什么学习string类?

1.1 C语言中的字符串

C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP思想(面向对象编程),而且底层空间需要用户自己清理,稍不留神可能还会越界访问。

例如:C语言中的strcpy和strcat函数

strcpy:把一个字符串的内容复制到另一个字符串中

             ①空间必须自己提供,并且要保证,2块空间至少一样大

             ②如果如果目标字符串的空间不足以容纳源字符串,就会导致内存溢出的问题

             ③ 在使用strcpy函数时,应保证目标字符串有足够的空间

strcat:将一个字符串拼接到另一个字符串的末尾

            ①从头到尾找源字符串的'\0',如果源字符串很长,那么效率会非常低下

            ②目标字符串必须有足够的空间来容纳源字符串,否则会导致缓冲区溢出的问题

在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单,方便,快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数。


二、标准库中的string类

2.1 string类

(1)字符串是表示字符序列的类

(2)标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性

(3)string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型)

(4)string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数

(5)注意:这个类独立于所使用的编码来处理字节:如果用来处理多字节或变成字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作

总结:

  1. string是表示字符串的字符串类
  2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作
  3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char,char_traits,allocator>string
  4. 不能操作多字节或者变长字符的序列

在使用string类时,必须包含#include头文件以及using namespace std; 

2.2 string类对象的常见构造

1.string类对象的常见构造

(constructor)函数名称功能说明
string()  默认构造 (不传参就可以调用)构造空的string类对象,即空字符串
string(const char* s) 带参构造用C-string来构造string类对象
string(const string& s) 拷贝构造拷贝构造函数
string(size_t n,char c)string类对象中包含n个字符c
string(const string& s,size_t pos,size_t len = npos)从pos位置开始,拷贝len个字符去构造(初始化)
string(const char* s,size_t n)拷贝字符串的前n个字符

我们先把前3个给试试看~

void test_string1() {string s1;					//默认构造string s2("hello world!");	//带参构造string s3(s2);				//拷贝构造//支持流插入和流提取cout << s1 << endl;cout << s2 << endl;cout << s3 << endl;cin >> s1;cout << s1 << endl;
}

运行结果如下:


(3)string(const string& s,size_t pos,size_t len = npos)函数

string(const string& s,size_t pos,size_t len = npos);

 我们可以尝试一下:

那么,当len为npos是什么意思呢?

如果我们不传第3个参数的值,那么len就默认是npos,就从pos位置开始,拷贝42亿个字符。

但是根本不可能啊!所以,当出现这种省略第3个参数的情况,编译器默认拷贝到源字符串的结尾。

那如果我传递的第3个参数的值大于源字符串的长度,会怎么样?很明显,也是拷贝到字符串的结束位置。

void test_string2() {string s1("beautiful!");string s2(s1, 4, 6);string s3(s1, 4);string s4(s1, 4, 30);cout << s2 << endl;cout << s3 << endl;cout << s4 << endl;
}

总结:

①len>后面的字符长度,有多少拷贝多少,拷贝到结尾

②缺省参数npos是整型最大值,一定大于后面的长度,不传第3个参数默认拷贝到结尾


(5)string(const char* s,size_t n)函数

我们测试一下:

void test_string3() {string s1("hello world!",5);cout << s1 << endl;
}


(6)string(size_t n,char c)函数

我们测试一下:

void test_string4() {string s1(10,'x');cout << s1 << endl;
}


小试牛刀:

看看这2个函数,是不是感觉很熟悉?

void test_string5() {//带参构造string s1("hello world!");//隐式类型转换string s2 = "hello world!";
}

其实,这2个看似相同,但是里面的逻辑是不一样的~

那如果我想用引用&符号呢?

void test_string6() {//带参构造string s1("hello world!");//隐式类型转换string s2 = "hello world!";//引用的是生成的临时对象//临时对象具有常性,因此,需要在前面添加constconst string& s3 = "hello world!";
}

此时,s3为临时对象的别名,因此,这里是直接构造,不需要优化


2.3 string类对象的容量操作
函数名称功能说明
size返回字符串有效长度
length返回字符串有效长度
capacity返回空间总大小
empty检测字符串是否为空串,是返回true,否则返回false
clear清空有效字符 
reserve为字符串预留空间
resize将有效字符的个数改成n个,多出的空间用字符c填充

(1)size函数和length函数

size_t size() const;

返回字符串有效字符长度 

void test_string7() {string s1("hello world");cout << s1.size() << endl;cout << s1.length() << endl;
}

注意:1.size()和length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下都是用size()

(2)capacity函数

size_t capacity() const;

 返回字符串的容量

void test_string30() {string s1("hello");cout << s1.capacity() << endl;
}

 我们可以看看在vs上的扩容:

void TestPushBack() {string s;size_t sz = s.capacity();cout << "capacity init: " << sz << '\n';cout << "making s grow:\n";for (int i = 0; i < 200; i++) {s.push_back('c');if (sz != s.capacity()) {sz = s.capacity();cout << "capacity changed: " << sz << '\n';}}
}

我们可以看到,capacity比实际空间少一个,有一个多的空间是预留给'\0'的 

如何扩容,C++标准并没有规定,取决于编译器实现

(3)empty函数

bool empty() const;

检测字符串是否为空串,为空返回true,否则返回false

void test_string31() {string s1;string s2("hello");cout << s1.empty() << endl;cout << s2.empty() << endl;
}

 

(4)clear函数

void clear();

用于清空有效字符,不改变字符串容量的大小

void test_string32() {string s1("hello");s1.clear();cout << s1.size() << endl;
}

 

(5)reserve函数

void reserve(size_t n = 0);

为字符串预留空间(只影响capacity,不影响size)

void test_string33() {string s1("hello");cout << s1.capacity() << endl;s1.reserve(10);cout << s1.capacity() << endl;s1.reserve(50);cout << s1.capacity() << endl;
}

如果n比原容量小,则不做改变

在vs上常常会开比n更大一些的空间

所以,如果知道需要多少空间,我们可以使用reserve函数提前开好,避免频繁扩容带来的不方便

(6)resize函数

void resize(size_t n);

void resize(size_t n,char c);

将有效字符的个数修改为n,并且如果n大于原来的_size,多出来的地方用字符c填充,不改变字符串容量的大小(既可以影响size,又可以影响capacity)

如果没有给出字符c,则用'\0'填充

void test_string34() {string s1("hello");cout << s1.c_str() << endl;s1.resize(2);cout << s1.c_str() << endl;s1.resize(10,'x');cout << s1.c_str() << endl;
}

 


2.4 string类对象的访问及遍历操作
函数名称功能说明
operator[]返回pos位置的字符,const string类对象调用
begin+endbegin获取一个字符的迭代器+end获取最后一个字符下一个位置的迭代器
rbegin+rendbegin获取一个字符的迭代器+rend获取最后一个字符下一个位置的迭代器
范围forC++11支持更简洁的范围for的新遍历方式
at返回字符串中pos位置的字符的引用
back返回字符串最后一个字符的引用
front返回字符第一个字符串的引用

如果,我想遍历s1字符串,该怎么做呢?

①首先,我们需要获取字符串的长度,运用size函数

②调用operator[]函数重载,可以使自定义类型像内置类型一样打印

void test_string8() {string s1("hello world");cout << s1.size() << endl;for (int i = 0; i < s1.size(); i++) {cout << s1[i] << " ";}cout << endl;
}

它的底层逻辑大概是这个样子:

引用返回,不仅可以减少拷贝,而且可以修改返回的对象

为什么可以用引用&返回呢?因为字符出了作用域并不会销毁,它是在堆上开辟的空间,返回的是堆上的字符,引用相当于是这个字符的别名

那么还有另一种方法遍历字符串么?有!使用iterator迭代器~

void test_string9() {string s1("hello world");cout << s1.size() << endl;//遍历方式1: 下标+[]for (int i = 0; i < s1.size(); i++) {cout << s1[i] << " ";}cout << endl;//遍历方式2: 使用iterator迭代器string::iterator it1 = s1.begin();while (it1 != s1.end()) {cout << *it1 << " ";++it1;}cout << endl;
}

此外,我们还可以使用范围for对字符串进行循环遍历~

void test_string9() {string s1("hello world");cout << s1.size() << endl;//遍历方式1: 下标+[]for (int i = 0; i < s1.size(); i++) {cout << s1[i] << " ";}cout << endl;//遍历方式2: 使用iterator迭代器string::iterator it1 = s1.begin();while (it1 != s1.end()) {cout << *it1 << " ";++it1;}cout << endl;//遍历方式3: 范围forfor (auto e : s1) {cout << e << " ";}cout << endl;
}

范围for的底层,它就是迭代器。因此,看上去有3种方法,实质上就只有2种---operator[]和迭代器

使用范围for的时候,是将s1里面的值依次拷贝给e,e相当于是s1里面的值的一份临时拷贝,对e进行修改不影响s1里面的值。如果我们需要通过e来改变s1里面的值,需要传引用&

	//遍历方式3: 范围forfor (auto& e : s1) {e++;//将s1里面的每一个字符都+1cout << e << " ";}cout << endl;

当然啦,迭代器也分为被const修饰的和不被const修饰。

我们举一个例子,假如字符串s1被const修饰,也就是说,字符串s1的内容不允许改变。

所以,这里应该修改成这样:

void test_string11() {const string s1("hello world");string::const_iterator st1 = s1.begin();while (st1 != s1.end()) {cout << *st1 << " ";++st1;}cout << endl;
}

同时,因为是iterator是被const修饰的,因此它指向的内容不允许修改,也就是不能对*st1进行修改

还有一种更简便的方法,就是直接使用关键字auto,来帮助我们自动匹配类型

正着遍历,我们知道一些了,反向遍历呢?

那就要请出我们的一个朋友了---->rbegin函数rend函数

就拿刚刚的s1字符串举一个例子吧~ 

我们可以尝试一下:

void test_string12() {string s1("hello world");string::reverse_iterator st1 = s1.rbegin();while (st1 != s1.rend()) {cout << *st1 << " ";++st1;}cout << endl;
}

同理, 如果s1被const修饰的话,reverse_iterator也应该被const修饰,变成const_reverse_iterator

(5)at函数

char& at(size_t pos);

const char& at(size_t pos)const;

返回字符串中pos位置的字符的引用

例如:

void test_string35() {string s1("hello");for (int i = 0; i < s1.size(); i++) {cout << s1.at(i);}cout << endl;
}

(6) back函数

char& back();

const char& back() const;

返回字符串最后一个字符的引用

例如:

void test_string36() {string s1("hello world!");cout << s1.back() << endl;
}

(7) front函数

char& front();

const char& front() const;

返回字符串第一个字符的引用

 例如:

void test_string37() {string s1("hello world!");cout << s1.front() << endl;
}


好啦,接下来,我们想要对字符串s1里面的内容进行字典序排序,该怎么做呢?

首先,我们需要包含一个头文件#include<algorithm>

其次,我们需要使用sort函数来帮助我们完成字符排序

void test_string13() {string s1("hello world");cout << s1 << endl;//s1按字典序排序sort(s1.begin(), s1.end());cout << s1 << endl;
}

排完序的结果如下:

 假设,我不想让第一个字符和最后一个字符不参与排序,只想让中间的字符进行排序,怎么做?

void test_string13() {string s1("hello world");cout << s1 << endl;//除了第一个和最后一个不参与,//其余的字符都要参与排序sort(++s1.begin(), --s1.end());cout << s1 << endl;
}

排序结果如下:

如果,我只想要前面的"hello"进行排序,那么区间就是下标[0,4],那么begin从0开始,end为5

void test_string13() {string s1("hello world");cout << s1 << endl;//前5个字符排序sort(s1.begin(), s1.begin() + 5);cout << s1 << endl;
}


片尾

今天我们学习了C++之stirng类(上),希望看完这篇文章能对友友们有所帮助!!!

点赞收藏加关注!!!

谢谢大家!!!

相关文章:

C++之String类(上)

片头 嗨&#xff01;好久不见~ 今天我们来学习C的Sting类&#xff0c;不过&#xff0c;在学习它之前&#xff0c;我们先来对STL库有一个简单的了解。 STL&#xff08;standard template library--标准模板库&#xff09;&#xff0c;是C标准库的重要组成部分&#xff0c;不仅是…...

kubernets基础-ingress详细介绍

文章目录 什么是IngressIngress详细说明Ingress示例 Ingress控制器Ingress控制器的工作原理Ingress控制器的特点常见的Ingress控制器 Ingress关联Ingress控制器一、Ingress资源对象二、Ingress控制器三、Ingress与Ingress控制器的关联方式四、注意事项 多实例部署一、Ingress多…...

jenkins部署Maven和NodeJS项目

在 Java 项目开发中&#xff0c;项目的编译、测试、打包等是比较繁琐的&#xff0c;属于重复劳动的工作&#xff0c;浪费人力和时间成本。以往开发项目时&#xff0c;程序员往往需要花较多的精力在引用 jar 包搭建项目环境上&#xff0c;跨部门甚至跨人员之间的项目结构都有可能…...

在unity资源中发现无效引用

本文主要解决在不打开unity的情况下搜索出无效引用的资源的方法 1. 概述 一般只要遍历一下目录里所有资源,判空一下就好了但有些情况下,不希望打开unity, 尤其希望是在资源整合时,想更快验证资源的合法性, 这对合并提交及出包验证时,都要较大的需求 2. 简单的验证方法 简单来…...

C#知识|基于反射和接口实现抽象工厂设计模式

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 01 应用场景 在项目的多数据库支持上、业务的多算法封装、以及各种变化的业务中&#xff1b; 02 抽象工厂组成 抽象工厂包括抽象产品&#xff08;即业务接口&#xff0c;可以通过抽象类或抽象接口设计&#xff09;…...

【分布式微服务云原生】gRPC vs RPC:深入探索远程过程调用的现代与经典

摘要 在分布式系统的世界里&#xff0c;gRPC和RPC是两个耳熟能详的术语&#xff0c;但它们之间有何区别和联系&#xff1f;本文将深入探讨gRPC和RPC的概念、关键特性、以及它们在现代软件开发中的应用。你将了解到gRPC如何作为RPC的一种实现&#xff0c;提供高性能的跨语言远程…...

听说这是MATLAB基础?

MATLAB&#xff08;矩阵实验室&#xff09;是一个强大的高性能计算环境和编程语言&#xff0c;广泛应用于数学计算、算法开发、数据分析、可视化以及模拟等多个领域。以下是MATLAB的一些基础知识&#xff0c;涵盖其功能、语法、基本操作等方面。 1. MATLAB环境 工作区&#xf…...

【CSS/HTML】圣杯布局和双飞翼布局实现两侧宽度固定,中间宽度自适应及其他扩展实现

前沿简介 圣杯布局和双飞翼布局是前端重要的布局方式。两者的功能相同&#xff0c;都是为了实现一个两侧宽度固定&#xff0c;中间宽度自适应的三栏布局。 圣杯布局来源于文章In Search of the Holy Grail,双飞翼布局来源于淘宝UED。 两者的实现方式有差异&#xff0c;但是都…...

数据流和数据流处理技术

一数据流 首先明确数据流概念&#xff1a;数据流是连续不断生成的、快速变化的无界数据序列 数据流类型&#xff1a; 数据流大致可以分为四种类型 1.连续型数据流&#xff1a;不断地产生数据&#xff0c;数据稳定速度输入系统。 2.突发型数据流&#xff1a;在某特定时间或…...

(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案

系列文章目录 文章目录 系列文章目录一、&#xff08;IDEA&#xff09;spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案1.资料 一、&#xff08;IDEA&#xff09;spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案 1.资料…...

解决TikTok无网络连接问题解析

随着社交媒体的快速发展&#xff0c;TikTok已成为全球用户最喜欢的短视频平台之一&#xff0c;吸引了数以亿计的用户。然而&#xff0c;在享受这个平台时&#xff0c;用户经常会遇到无网络连接的问题&#xff0c;这不仅影响观看体验&#xff0c;还可能导致无法上传内容或参与社…...

k8s中,ingress的实现原理,及其架构。

图片来源&#xff1a;自己画的 图片来源&#xff1a;k8s官网 首先&#xff0c;什么是ingress? 是服务还是控制器&#xff1f; 都不精确 ingress是一个api资源 service和deployment也是api资源。 这几个相互协作&#xff0c;组建成一个对外提供服务的架构。 ingress提供的…...

【数据结构强化】应用题打卡

应用题打卡 数组的应用 对称矩阵的压缩存储 注意&#xff1a; 1. 2.上三角的行优先存储及下三角的列优先存储与数组的下表对应 上/下三角矩阵的压缩存储 注意&#xff1a; 上/下三角压缩存储是将0元素统一压缩存储&#xff0c;而不是将对角线元素统一压缩存储 三对角矩阵的…...

解决 MySQL 服务无法启动:failed to restart mysql.service: unit not found

目录 前言1. 问题描述2. 问题分析3. 解决步骤3.1 检查 MySQL 服务文件3.2 备份旧的服务文件3.3 启动 MySQL 服务3.4 验证服务状态 4. 总结结语 前言 在日常使用 MySQL 数据库时&#xff0c;有时候可能会遇到服务无法正常启动的问题。这类问题通常出现在系统更新或者服务配置文…...

Dubbo和Http的调用有什么区别

背景 我们在项目开发中&#xff0c;需要进行调用外部接口时&#xff0c;往往使用Dubbo和Http方式都能实现远程调用。那么他们在使用上&#xff0c;有什么区别呢&#xff1f; 定位不同 一个是分布式环境下的框架&#xff0c;一个是通信协议。 Dubbo&#xff1a;是一种高性能的…...

ARM 架构、cpu

一、ARM的架构 ARM是一种基于精简指令集&#xff08;RISC&#xff09;的处理器架构. 1、ARM芯片特点 ARM芯片的主要特点有以下几点&#xff1a; 精简指令集&#xff1a;ARM芯片使用精简指令集&#xff0c;即每条指令只完成一项简单的操作&#xff0c;从而提高指令的执行效率…...

【React】入门Day03 —— Redux 与 React Router 核心概念及应用实例详解

1. Redux 介绍 // 创建一个简单的Redux store const { createStore } Redux;// reducer函数 function counterReducer(state { count: 0 }, action) {switch (action.type) {case INCREMENT:return { count: state.count 1 };case DECREMENT:return { count: state.count -…...

u2net网络模型训练自己数据集

单分类 下载项目源码 项目源码 准备数据集 将json转为mask json_to_dataset.py import cv2 import json import numpy as np import os import sys import globdef func(file):with open(file, moder, encoding"utf-8") as f:configs json.load(f)shapes configs…...

登录功能开发 P167重点

会话技术&#xff1a; cookie jwt令牌会话技术&#xff1a; jwt生成&#xff1a; Claims&#xff1a;jwt中的第二部分 过滤器&#xff1a; 拦截器&#xff1a; 前端无法识别controller方法&#xff0c;因此存在Dispa什么的...

数据架构图:从数据源到数据消费的全面展示

在这篇文章中&#xff0c;我们将探讨如何通过架构图来展示数据的整个生命周期&#xff0c;从数据源到数据消费。下面是一个使用Mermaid格式的示例数据架构图&#xff0c;展示了数据从源到消费的流动、处理和存储过程。 数据架构图示例 说明 数据源&#xff1a;分为内部数据源&…...

useEffect 与 useLayoutEffect 的区别

useEffect 与 useLayoutEffect 的区别 useEffect和useLayoutEffect是处理副作用的React钩子函数&#xff0c;有以下区别1. 执行时机不同2. 对性能影响不同3. 对渲染的影响不同&#xff1a;4. 使用场景不同 使用建议 useEffect和useLayoutEffect是处理副作用的React钩子函数&…...

OPENCV判断图像中目标物位置及多目标物聚类

文章目录 在最近的项目中&#xff0c;又碰到一个有意思的问题需要通过图像算法来解决。就是显微拍摄的到的医疗图像中&#xff0c;有时候目标物比较偏&#xff0c;也就是在图像的比较偏的位置&#xff0c;需要通过移动样本&#xff0c;将目标物置于视野正中央&#xff0c;然后再…...

分布式理论:拜占庭将军问题

分布式理论&#xff1a;拜占庭将军问题 介绍拜占庭将军的故事将军的难题 解决方案口信消息型拜占庭问题之解流程总结 签名消息型拜占庭问题之解 总结 介绍 拜占庭将军问题是对分布式共识问题的一种情景化描述&#xff0c;由兰伯特于1082首次发表《The Byzantine Generals Prob…...

从零开始Ubuntu24.04上Docker构建自动化部署(三)Docker安装Nginx

安装nginx sudo docker pull nginx 启动nginx 宿主机创建目录 sudo mkdir -p /home/nginx/{conf,conf.d,html,logs} 先启动nginx sudo docker run -d --name mynginx -p 80:80 nginx 宿主机上拷贝docker上nginx服务上文件到本地目录 sudo docker cp mynginx:/etc/nginx/ngin…...

阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战

作者&#xff1a;胡志广(独鳌) 背景 Serverless 应用引擎 SAE 事件中心主要面向早期的 SAE 控制台只有针对于应用维度的事件&#xff0c;这个事件是 K8s 原生的事件&#xff0c;其实绝大多数的用户并不会关心&#xff0c;同时也可能看不懂。而事件中心&#xff0c;是希望能够…...

人口普查管理系统基于VUE+SpringBoot+Spring+SpringMVC+MyBatis开发设计与实现

目录 1. 系统概述 2. 系统架构设计 3. 技术实现细节 3.1 前端实现 3.2 后端实现 3.3 数据库设计 4. 安全性设计 5. 效果展示 ​编辑​编辑 6. 测试与部署 7. 示例代码 8. 结论与展望 一个基于 Vue Spring Boot Spring Spring MVC MyBatis 的人口普查管理…...

使用VBA快速将文本转换为Word表格

Word提供了一个强大的文本转表格的功能&#xff0c;结合VBA可以实现文本快速转换表格。 示例文档如下所示。 现在需要将上述文档内容转换为如下格式的表格&#xff0c;表格内容的起始标志为。 示例代码如下。 Sub SearchTab()Application.DefaultTableSeparator "*&quo…...

力扣题解1870

这道题是一个典型的算法题&#xff0c;涉及计算在限制的时间内列车速度的最小值。这是一个优化问题&#xff0c;通常需要使用二分查找来求解。 题目描述&#xff08;中等&#xff09; 准时到达的列车最小时速 给你一个浮点数 hour &#xff0c;表示你到达办公室可用的总通勤时…...

D3.js数据可视化基础——基于Notepad++、IDEA前端开发

实验:D3.js数据可视化基础 1、实验名称 D3数据可视化基础 2、实验目的 熟悉D3数据可视化的使用方法。 3、实验原理 D3 的全称是(Data-Driven Documents),是一个被数据驱动的文档,其实就是一个 JavaScript 的函数库,使用它主要是用来做数据可视化的。本次实…...

在Robot Framework中Run Keyword If的用法

基本用法使用 ELSE使用 ELSE IF使用内置变量使用Python表达式本文永久更新地址: 在Robot Framework中&#xff0c;Run Keyword If 是一个条件执行的关键字&#xff0c;它允许根据某个条件来决定是否执行某个关键字。下面是 Run Keyword If 的基本用法&#xff1a; Run Keyword…...

网站在哪里/计算机培训班有用吗

昨天自己写一个按照当天日期查询数据的方法&#xff0c;例如今天是2012年7月20日。我原来写了好多种写法例如 ... where createtime like 2012-07-20%,还有... where createtime like %2012-07-20%等等的一些写法。但是总是不奏效。后来查阅了许多的资料自己算是吃了一惊。 这…...

wordpress怎么做淘客网站/网站推广联盟

转自https://blog.csdn.net/xiaohaijiejie/article/details/51023570&#xff0c;感谢原创作者Opencv中有图像修复的函数&#xff0c;其算法参考文献为Alexandru Telea 于2004年发表于Journal of Graphic Tools上的“An Image Inpainting Technique Based On the Fast Marching…...

万维网 网站到期/seo推广培训中心

在输入正确的账号密码后&#xff0c;单击确定后&#xff0c;登陆界面关闭&#xff0c;弹出一个新窗体。 首先定义Login类&#xff0c;并定义创建窗体的方法 需要注意的是&#xff0c;JFrame、JLabel、JTextField、JPasswordField、JButton都是javax.swing包下的类(FlowLayout是…...

衡水网站制作费用/头条关键词排名查询

一个人能跑出伟大一群人能跑出传奇5月1日-5月26日『公装无忧跑步月』 我们迈开脚步、跑出速度1好友&#xff0c;就多一声鼓励1公里&#xff0c;一起把终点拉近1配速&#xff0c;解锁今日份的成就感4支团结一致的队伍38位『公装人』在这个肆意奔跑的5月我们遇见了全新的自己『公…...

网站关于 模板/网站托管代运营

Java.util.LinkedList.size()方法用于获取链表的大小或链表中存在的元素数。用法:LinkedList.size()参数&#xff1a;此方法不带任何参数。返回值&#xff1a;此方法返回LinkedList中存在的元素的大小或数量。以下示例程序旨在说明Java.util.LinkedList.size()方法&#xff1a;…...

南通优普网站建设制作/辽宁seo推广

吞吐量 指在一次性能测试过程中网络上传输的数据量的总和。 对于交互式应用来说&#xff0c;吞吐量指标反映的是服务器承受的压力&#xff0c;在容量规划的测试中&#xff0c;吞吐量是一个重点关注的指标&#xff0c;因为它能够说明系统级别的负载能力&#xff0c;另外&#xf…...