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

C++之STL整理(2)之vector超详用法整理

C++之STL整理(2)之vector用法(创建、赋值、方法)整理

注:整理一些突然学到的C++知识,随时mark一下
例如:忘记的关键字用法,新关键字,新数据结构


C++ 的vector用法整理

  • C++之STL整理(2)之vector用法(创建、赋值、方法)整理
  • 一、vector的初始化
    • 1、默认构造函数
    • 2、拷贝构造函数copy区间
    • 3、指定数量和元素值的构造函数
    • 4、指定数量的构造函数
    • 5、拷贝构造函数
  • 二、vector的初始化-赋值
    • 1、.assign(beg, end) 赋值操作
    • 2、.assign(n, elem) 赋值操作
    • 3、重载等号操作符 operator=
    • 4、直接列表初始化 `Vector<T> {,};`
    • 5、swap 函数
  • 三、数据得增删查改
    • 1、at(int id)接口
    • 2、front()接口
    • 3、back()接口
    • 4、[id]直接取
    • 5、插入函数
    • 6、尾部添加 push_back(ele)
    • 7、尾部删去 pop_back()
    • 8、删区间
    • 9、删指定位置
    • 10、清空
  • 四、其他接口
    • 1、size()成员函数
    • 2、empty()
    • 3、resize(int num)
    • 4、capacity()
    • 5、reserve(int len)
  • 总结


提示:本文为 C++ 中 vector构造、赋值、接口 的写法和举例


一、vector的初始化

  根据vector的以下封装好的构造函数,现在示例每种构造方式的创建:

vector构造函数:vector<T> v; //默认构造函数
vector(v.begin(), v.end());//将v[begin(), end())区间中的元素copy给对象。
vector(n, elem);//构造函数将n个elem赋给对象。
vector(n);//构造函数将n个0或空赋值给对象。
vector(const vector &vec);//拷贝构造函数。

1、默认构造函数

创建一个空的vector。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v; // 创建一个空的vector  std::cout << "Size of vector v: " << v.size() << std::endl; // 输出:Size of vector v: 0  return 0;  
}

2、拷贝构造函数copy区间

假设有一个已存在的vector,我们想要创建一个新的vector并拷贝其中一部分元素。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {1, 2, 3, 4, 5};  std::vector<int> v2(v.begin(), v.begin() + 3); // 拷贝前3个元素  for (int num : v2) {  std::cout << num << " "; // 输出:1 2 3  }  std::cout << std::endl;  return 0;  
}

3、指定数量和元素值的构造函数

创建一个包含特定数量且所有元素都具有相同值的vector。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v(5, 10); // 创建一个包含5个10的vector  for (int num : v) {  std::cout << num << " "; // 输出:10 10 10 10 10  }  std::cout << std::endl;  return 0;  
}

4、指定数量的构造函数

创建一个包含特定数量的vector,所有元素默认初始化为该类型的默认值(对于基本类型如int,默认值为0)。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v(5); // 创建一个包含5个0的vector  for (int num : v) {  std::cout << num << " "; // 输出:0 0 0 0 0  }  std::cout << std::endl;  return 0;  
}

5、拷贝构造函数

从另一个已存在的vector创建一个新的vector,作为它的拷贝。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {1, 2, 3, 4, 5};  std::vector<int> v2(v); // 使用拷贝构造函数创建v2,它是v的拷贝  for (int num : v2) {  std::cout << num << " "; // 输出:1 2 3 4 5  }  std::cout << std::endl;  return 0;  
}

二、vector的初始化-赋值

vector常用赋值方式:
assign(beg, end);//将[beg, end)区间中的数据拷贝赋值。
assign(n, elem);//将n个elem拷贝赋值。
vector& operator=(const vector  &vec);//重载=
Vector<T> = {,,,};//直接赋值一个数组
Vector<T>  {,,,};
swap(vec);// 与vec的元素互换。

1、.assign(beg, end) 赋值操作

使用区间迭代器将另一个容器或数组中的数据拷贝到vector中。

#include <iostream>  
#include <vector>  
#include <algorithm> // for std::next  int main() {  std::vector<int> v = {1, 2, 3, 4, 5};  int arr[] = {6, 7, 8, 9, 10};  v.assign(std::begin(arr), std::end(arr)); // 赋值arr数组到v  for (int num : v) {  std::cout << num << " "; // 输出:6 7 8 9 10  }  std::cout << std::endl;  return 0;  
}

2、.assign(n, elem) 赋值操作

将n个值为elem的元素拷贝到vector中。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v;  v.assign(5, 10); // 赋值5个10到v  for (int num : v) {  std::cout << num << " "; // 输出:10 10 10 10 10  }  std::cout << std::endl;  return 0;  
}

3、重载等号操作符 operator=

使用重载的等号操作符将一个vector的内容赋给另一个vector。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v1 = {1, 2, 3, 4, 5};  std::vector<int> v2;  v2 = v1; // 使用重载的等号操作符赋值v1到v2  for (int num : v2) {  std::cout << num << " "; // 输出:1 2 3 4 5  }  std::cout << std::endl;  return 0;  
}

4、直接列表初始化 Vector<T> {,};

在创建vector对象时,直接使用列表初始化语法。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {21, 22, 23, 24, 25}; // 直接列表初始化  for (int num : v) {  std::cout << num << " "; // 输出:21 22 23 24 25  }  std::cout << std::endl;  return 0;  
}

5、swap 函数

使用std::swap或vector的成员函数swap来交换两个vector的内容。

#include <iostream>  
#include <vector>  
#include <algorithm> // for std::swap  int main() {  std::vector<int> v1 = {1, 2, 3};  std::vector<int> v2 = {4, 5, 6};  std::swap(v1, v2); // 使用std::swap交换v1和v2的内容  // 输出交换后的v1  for (int num : v1) {  std::cout << num << " "; }std::cout << std::endl;  return 0;
}

三、数据得增删查改

vector数据存取操作,主要有at()、front()、back()接口和括号[]取得方法。
vector插入和删除操作,主要有insert、erase、clear、pushback、popback接口。

1、at(int id)接口

at成员函数用于通过索引访问元素,并且在索引越界时会抛出std::out_of_range异常。

#include <iostream>  
#include <vector>  
#include <stdexcept> // for std::out_of_range  int main() {  std::vector<int> v = {10, 20, 30, 40, 50};  try {  std::cout << v.at(2) << std::endl; // 输出:30  std::cout << v.at(10) << std::endl; // 抛出std::out_of_range异常  } catch (const std::out_of_range& e) {  std::cerr << "Index out of range: " << e.what() << std::endl;  }  return 0;  
}

2、front()接口

front成员函数返回容器中第一个元素的引用。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {10, 20, 30, 40, 50};  std::cout << v.front() << std::endl; // 输出:10  return 0;  
}

3、back()接口

back成员函数返回容器中最后一个元素的引用。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {10, 20, 30, 40, 50};  std::cout << v.back() << std::endl; // 输出:50  return 0;  
}

4、[id]直接取

operator[]通过索引直接访问元素,如果越界,行为是未定义的(通常会导致程序崩溃)。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {10, 20, 30, 40, 50};  std::cout << v[2] << std::endl; // 输出:30  // std::cout << v[10] << std::endl; // 未定义行为,通常会导致程序崩溃  return 0;  
}

5、插入函数

insert(const_iterator pos, int count, ele)在迭代器pos指向的位置插入count个值为ele的元素。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {10, 20, 40, 50};  v.insert(v.begin() + 1, 2, 30); // 在索引1的位置插入2个30  for (int num : v) {  std::cout << num << " "; // 输出:10 30 30 20 40 50  }  std::cout << std::endl;  return 0;  
}

6、尾部添加 push_back(ele)

在容器的尾部插入一个元素ele。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {10, 20, 30};  v.push_back(40); // 在尾部插入40  for (int num : v) {  std::cout << num << " "; // 输出:10 20 30 40  }  std::cout << std::endl;  return 0;  
}

7、尾部删去 pop_back()

删去容器的最后一个元素。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {10, 20, 30, 40};v.pop_back(); // 删除最后一个元素40  for (int num : v) {  std::cout << num << " "; // 输出:10 20 30  }  std::cout << std::endl;  return 0;  
}

8、删区间

erase(const_iterator start, const_iterator end)删去从迭代器start到end(不包括end)之间的所有元素。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {10, 20, 30, 40, 50};  v.erase(v.begin() + 1, v.begin() + 3); // 删除索引1到2之间的元素(即20和30)  for (int num : v) {  std::cout << num << " "; // 输出:10 40 50  }  std::cout << std::endl;  return 0;  
}

9、删指定位置

erase(const_iterator pos)删除迭代器pos指向的元素。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {10, 20, 30, 40, 50};  v.erase(v.begin() + 2); // 删除索引2的元素(即30)  for (int num : v) {  std::cout << num << " "; // 输出:10 20 40 50  }  std::cout << std::endl;  return 0;  
}

10、清空

clear()删掉容器中的所有元素。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {10, 20, 30, 40, 50};  v.clear(); // 删除所有元素  if (v.empty()) {  std::cout << "Vector is empty." << std::endl; // 输出:Vector is empty.  }  return 0;  
}

这些操作提供了对vector容器内容的灵活操作,可以轻松地插入和删除元素,以满足程序的需要。使用迭代器(或索引)时,请确保它们指向有效的容器位置,以避免未定义行为或异常。

四、其他接口

1、size()成员函数

返回容器中的元素个数。这个数量等于当前vector实际包含的元素数。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {10, 20, 30, 40, 50};  std::cout << "Size of vector: " << v.size() << std::endl; // 输出:Size of vector: 5  return 0;  
}

2、empty()

empty成员函数检查容器是否为空。如果容器中没有元素,它返回true;否则返回false。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v;  if (v.empty()) {  std::cout << "Vector is empty." << std::endl; // 输出:Vector is empty.  } else {  std::cout << "Vector is not empty." << std::endl;  }  return 0;  
}

3、resize(int num)

resize成员函数用于改变容器的大小。如果新的大小num大于当前大小,则容器会增长,新添加的元素会被初始化为默认值(对于内置类型,通常是0)。如果num小于当前大小,则末尾超出的元素会被删除。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {10, 20, 30};  v.resize(5); // 容器增长,新元素初始化为0  for (int num : v) {  std::cout << num << " "; // 输出:10 20 30 0 0  }  std::cout << std::endl;  v.resize(2); // 容器缩短,超出的元素被删除  for (int num : v) {  std::cout << num << " "; // 输出:10 20  }  std::cout << std::endl;  return 0;  
}

resize(int num, elem) 是resize的另一种重载形式。它允许你为新的元素指定一个初始值elem。如果容器增长,新添加的元素会被初始化为elem。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {10, 20, 30};  v.resize(5, 42); // 容器增长,新元素初始化为42  for (int num : v) {  std::cout << num << " "; // 输出:10 20 30 42 42  }  std::cout << std::endl;  return 0;  
}

4、capacity()

capacity成员函数返回容器当前分配的存储空间大小。这通常大于或等于size返回的值,因为vector为了效率可能会预留一些额外的空间。

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v = {10, 20, 30};  std::cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << std::endl;  // 输出可能类似于:Size: 3, Capacity: 3 或 Size: 3, Capacity: 4(取决于实现)  return 0;  
}

5、reserve(int len)

reserve成员函数用于预分配容器的存储空间。它并不改变容器的大小(即size的值不变),但会增加容器的capacity。预分配空间可以提高插入元素的效率,因为当容器需要增长时,它可能不需要重新分配整个存储空间。reserve成员函数用于预分配容器的存储空间,它可以帮助提高插入元素的效率,因为当容器需要增长时,如果已经有足够的预留空间,它就可以避免重新分配整个存储空间。

这里是一个更详细的例子,展示了如何使用reserve来预分配vector的存储空间:

#include <iostream>  
#include <vector>  int main() {  std::vector<int> v;  // 初始时,size和capacity都是0  std::cout << "Initial size: " << v.size() << ", Initial capacity: " << v.capacity() << std::endl;  // 使用reserve预分配至少10个元素的存储空间  v.reserve(10);  // size仍然是0,因为我们没有添加任何元素  // 但capacity至少为10  std::cout << "After reserve, size: " << v.size() << ", Capacity: " << v.capacity() << std::endl;  // 添加元素,直到达到或超过预留的capacity  for (int i = 0; i < 15; ++i) {  v.push_back(i);  }  // size现在是15,因为我们添加了15个元素  // capacity可能已经增长,以容纳更多的元素  std::cout << "After adding elements, size: " << v.size() << ", Capacity: " << v.capacity() << std::endl;  return 0;  
}

输出可能类似于:

Initial size: 0, Initial capacity: 0  
After reserve, size: 0, Capacity: 10  
After adding elements, size: 15, Capacity: 20 (或更大,取决于实现)

capacity的确切值可能因不同的vector实现而异。在上面的例子中,当添加超过预留capacity的元素时,vector可能会再次分配内存,并可能增加其capacity。这样做是为了避免在每次添加元素时都重新分配内存,从而提高性能。在实践中,如果你知道将要向vector中添加大量元素,使用reserve来预分配足够的空间通常是一个好习惯,因为这可以避免不必要的内存分配和元素复制。

总结

相关文章:

C++之STL整理(2)之vector超详用法整理

C之STL整理&#xff08;2&#xff09;之vector用法&#xff08;创建、赋值、方法&#xff09;整理 注&#xff1a;整理一些突然学到的C知识&#xff0c;随时mark一下 例如&#xff1a;忘记的关键字用法&#xff0c;新关键字&#xff0c;新数据结构 C 的vector用法整理 C之STL整…...

机器学习作业二之KNN算法

KNN&#xff08;K- Nearest Neighbor&#xff09;法即K最邻近法&#xff0c;最初由 Cover和Hart于1968年提出&#xff0c;是一个理论上比较成熟的方法&#xff0c;也是最简单的机器学习算法之一。该方法的思路非常简单直观&#xff1a;如果一个样本在特征空间中的K个最相似&…...

笔记81:在服务器中运行 Carla 报错 “Disabling core dumps.”

背景&#xff1a;使用实验室提供的服务器配 Carla-ROS2 联合仿真的实验环境&#xff0c;在安装好 Carla 后运行 ./CarlaUE4.sh 但是出现 Disabling core dumps. 报错&#xff0c;而且不会出现 Carla 的窗口&#xff1b; 解决&#xff1a;运行以下命令 ./CarlaUE4.sh -carl…...

ensp中pc机访问不同网络的服务器

拓扑图如下&#xff0c;资源已上传 说明&#xff1a;pc通过2个路由访问server服务器 三条线路分别是192.168.1.0网段&#xff0c;192.168.2.0网段和192.168.3.0网段&#xff0c;在未配置的情况下&#xff0c;pc设备是访问不到server的 具体操作流程 第一&#xff1b;pc设备…...

CSGO赛事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 目录 1. 系…...

win10微软拼音输入法 - bug - 在PATH变量为空的情况下,无法输入中文

文章目录 win10微软拼音输入法 - bug - 在PATH变量为空的情况下&#xff0c;无法输入中文概述笔记实验前提条件100%可以重现 - 无法使用win10拼音输入法输入中文替代的输入法软件备注备注END win10微软拼音输入法 - bug - 在PATH变量为空的情况下&#xff0c;无法输入中文 概述…...

Java安全篇-Fastjson漏洞

前言知识&#xff1a; 一、json 概念&#xff1a; json全称是JavaScript object notation。即JavaScript对象标记法&#xff0c;使用键值对进行信息的存储。 格式&#xff1a; {"name":"wenda","age":21,} 作用&#xff1a; JSON 可以作为…...

Flink系列之:Flink SQL Gateway

Flink系列之&#xff1a;Flink SQL Gateway 一、Flink SQL Gateway二、部署三、启动SQL Gateway四、运行 SQL 查询五、SQL 网关启动选项六、SQL网关配置七、支持的端点 一、Flink SQL Gateway SQL 网关是一项允许多个客户端从远程并发执行 SQL 的服务。它提供了一种简单的方法…...

Linux基础篇:解析Linux命令执行的基本原理

Linux 命令是一组可在 Linux 操作系统中使用的指令&#xff0c;用于执行特定的任务&#xff0c;例如管理文件和目录、安装和配置软件、网络管理等。这些命令通常在终端或控制台中输入&#xff0c;并以文本形式显示输出结果。 Linux 命令通常以一个或多个单词的简短缩写或单词…...

LeetCode-热题100:153. 寻找旋转排序数组中的最小值

题目描述 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 [4,5,6,7,0,1,2] 若旋转 7 次…...

游戏客户客户端面经

C#和C的类的区别C# List添加100个Obj和100 int内存是怎么变化的重载和重写的区别&#xff0c;重载是怎么实现的重写是怎么实现的&#xff1f;虚函数表是类的还是对象的用过哪些C的STLVector底层是怎么实现的Vector添加一百次数据内存是怎么变化Map的底层&#xff0c;红黑树的查…...

网站业务对接DDoS高防

准备需要接入的网站域名清单&#xff0c;包含网站的源站服务器IP&#xff08;仅支持公网IP的防护&#xff09;、端口信息等。所接入的网站域名必须已完成ICP备案。如果您的网站支持HTTPS协议访问&#xff0c;您需要准备相应的证书和私钥信息&#xff0c;一般包含格式为.crt的公…...

Python-VBA编程500例-024(入门级)

字符串写入的行数(Line Count For String Writing)在实际应用中有着广泛的应用场景。常见的应用场景有&#xff1a; 1、文本编辑及处理&#xff1a;在编写或编辑文本文件时&#xff0c;如使用文本编辑器或文本处理器&#xff0c;经常需要处理字符串并确定其在文件中的行数。这…...

蓝桥杯 - 小明的背包1(01背包)

解题思路&#xff1a; 本题属于01背包问题&#xff0c;使用动态规划 dp[ j ]表示容量为 j 的背包的最大价值 注意&#xff1a; 需要时刻提醒自己dp[ j ]代表的含义&#xff0c;不然容易晕头转向 注意越界问题&#xff0c;且 j 需要倒序遍历 如果正序遍历 dp[1] dp[1 - vo…...

学习java第二十六天

Spring是一个开源框架&#xff0c;Spring是一个轻量级的Java 开发框架。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构&#xff0c;分层架构允许使用者选择使用哪一个组件&#xff0c;同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的…...

Go第三方框架--gin框架(二)

4. gin框架源码–Engine引擎和压缩前缀树的建立 讲了这么多 到标题4才开始介绍源码&#xff0c;主要原因还是想先在头脑中构建起 一个大体的框架 然后再填肉 这样不容易得脑血栓。标题四主要涉及标题2.3的步骤一 也就是 标题2.3中的 粗线框中的内容 4.1 Engine 引擎的建立 见…...

五分钟搞懂UDS刷写34/36/37服务(内含S19文件解读)

目录 34服务 36服务 37服务 S19文件介绍 理论太多总是让人头昏&#xff0c;通过举例的方法学习刷写是最好的办法&#xff0c;刷写中最重要的就是34/36/37服务之间的联动&#xff0c;在我当前的项目中37服务较为简单&#xff0c;等待36服务全部传输完成之后&#xff0c;发送…...

知识图谱智能问答系统技术实现

知识图谱是以一种结构化的方式存储和描述知识的数据集合&#xff0c;它将知识表示为节点和边的形式&#xff0c;并可以对这些节点和边进行有意义的存储、查询、连接和关系挖掘等操作。知识图谱不仅可以为人提供理解信息的能力&#xff0c;而且还能为机器提供对信息进行分析、推…...

【unity】如何汉化unity编译器

在【unity】如何汉化unity Hub这篇文章中&#xff0c;我们已经完成了unity Hub的汉化&#xff0c;现在让我们对unity Hub安装的编译器也进行下汉化处理。 第一步&#xff1a;在unity Hub软件左侧栏目中点击安装&#xff0c;选择需要汉化的编译器&#xff0c;再点击设置图片按钮…...

为什么Python不适合写游戏?

知乎上有热门个问题&#xff1a;Python 能写游戏吗&#xff1f;有没有什么开源项目&#xff1f; Python可以开发游戏&#xff0c;但不是好的选择 Python作为脚本语言&#xff0c;一般很少用来开发游戏&#xff0c;但也有不少大型游戏有Python的身影&#xff0c;比如&#xff1…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...