【C++】vector(上):vector的常用接口介绍

文章目录

  • 前言
  • 一、vector的介绍
  • 二、vector的常用接口介绍
    • 1.vector类对象的常见构造
    • 2.vector iterator 的使用
    • 3.vector类对象的容量操作
      • 3.1 size、capacity 和 empty的使用
      • 3.2 reserve的使用
      • 3.3 resize的使用
    • 4.vector类对象的访问(包含data:返回底层数组的指针)
    • 5.vector类对象的修改操作
      • 5.1 push_back、insert(插入数据)
      • 5.2 pop_back、erase 和 clear(删除数据)
      • 5.3 成员函数swap
    • 6.vector类非成员函数
      • 6.1 relational operators系列函数
      • 6.2 非成员函数swap


前言

一、vector的介绍(包含vector类中typedef的部分类型别名介绍)
二、vector类的常用接口说明(vector类对象的 常见构造(重点)、容量操作、遍历操作 和 修改操作等接口,以及一些vector类非成员函数的接口)


一、vector的介绍

C++标准模板库中的容器vector是一个动态数组,能够自动管理内存,支持快速随机访问。 它的接口包括构造函数、大小和容量相关的操作、元素访问方法、修改容器的操作,还有迭代器相关的函数。
在这里插入图片描述

在C++标准库的 std::vector 中,allocator(内存分配器)是模板的第二个参数,通常可以忽略,使用默认的即可。但在需要特殊内存管理时,可以自定义allocator,不过这种情况相对少见。
默认内存分配器已足够高效,自定义内存分配器应仅在性能分析表明有必要时才会使用,所以后续介绍vector接口时,只会考虑大多数情况,忽略allocator(直接使用默认的)这个参数,简化vector的使用。

vector 类中typedef了很多类型别名,以下代码展示了一些常用的类型别名:

typedef T value_type;// 其中 T 是 vector 的第一个模板参数
typedef size_t size_type;
// size_t 是 C++ 标准库中定义的一个类型别名,它通常是一个无符号整数类型。其可能的定义方式如下:
// 64 位系统下: typedef unsigned long long size_t; 
// 32 位系统下: typedef unsigned int size_t; 
typedef T& reference;
typedef const T& const_reference;
typedef Allocator allocator_type;

二、vector的常用接口介绍

1.vector类对象的常见构造

在这里插入图片描述
忽略allocator相关参数后的简化接口:

(constructor)构造函数声明接口说明
vector()无参构造,默认构造空容器
vector( size_type n, const value_type& val =value_type() )构造并初始化n个val
template< class InputIterator > vector ( InputIterator first, InputIterator last )使用迭代器进行初始化构造
vector (const vector& x)拷贝构造
vector ( initializer_list<value_type> il )初始化列表构造(C++11新增,了解用法)

示例一(无参构造,默认构造空容器):
vector( );

#include <vector>
using namespace std;int main()
{vector<int> app;// size和capacity均为0return 0;
}

在这里插入图片描述
示例二(构造并初始化n个val):
vector( size_t n, const T& val = T( ) );

#include <vector>
#include <string>
using namespace std;int main()
{vector<int> a1(5); // vector(size_t n, const int& val =int())vector<int*> a2(5); // vector(size_t n, const int*& val =int*())vector<int> a3(5, 10);vector<string> a4(5); // vector(size_t n, const string& val =string())vector<string> a5(5,"abcd");return 0;
}

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

补充:
(1)规定 int()、char() 等内置类型创建的匿名对象(不传参数时)默认为 0 ; int * ()、char * () 等默认为 nullptr
(2)string() 等自定义类型创建的匿名对象(不传参数时)会去调用对应的默认构造函数

示例三(使用迭代器进行初始化构造):
template< class InputIterator >
vector ( InputIterator first, InputIterator last );

#include <vector>
#include <list>
using namespace std;int main()
{list<int> lst = { 1, 2, 3, 4, 5 }; // 初始化列表的构造方式vector<int> vec1(lst.begin(), lst.end());  // list的迭代器是双向迭代器int arr[] = { 4, 5, 6, 7, 8, 9 };vector<int> vec2(arr + 2, arr + 5);  // 指针作为随机访问迭代器vector<int> vec = { 10, 11, 12, 13, 14, 15 };vector<int> vec3(vec.begin() + 1, vec.end() - 2); // vector的迭代器是随机访问迭代器return 0;
}

在这里插入图片描述

补充知识(迭代器的种类)

在 C++ 中,迭代器(Iterator)是用于遍历容器(如 vectorlistmap等)中元素的对象,类似于指针的行为。根据功能强弱,迭代器分为以下 5 种类别,支持不同的操作:

(1). 输入迭代器(Input Iterator)

  • 功能:只能单向移动(向前),且只能读取元素(不可修改)。
  • 支持的操作++(前置/后置递增)、*(解引用)、==/!=(比较)。
  • 典型应用:一次性遍历(如从文件流读取数据)。
  • 示例istream_iterator(用于输入流)。

(2). 输出迭代器(Output Iterator)

  • 功能:只能单向移动(向前),且只能写入元素(不可读取)。
  • 支持的操作++(前置/后置递增)、*(解引用赋值)。
  • 典型应用:向容器或流中写入数据。
  • 示例ostream_iterator(用于输出流)。

(3). 前向迭代器(Forward Iterator)

  • 功能:继承自输入迭代器,支持多次读写和重复遍历。
  • 支持的操作:所有输入迭代器的操作,且可以多次递增。
  • 典型容器:单链表(如 forward_list)、哈希表(如 unordered_set)。

(4). 双向迭代器(Bidirectional Iterator)

  • 功能:继承自前向迭代器,支持双向移动(向前和向后)。
  • 支持的操作:所有前向迭代器的操作,新增 --(前置/后置递减)。
  • 典型容器:双链表(如 list)、关联容器(如 setmap)。

(5). 随机访问迭代器(Random Access Iterator)

  • 功能:功能最强,支持直接跳跃访问任意位置。
  • 支持的操作:所有双向迭代器的操作,新增:
    • +/-+=/-=(跳跃多个位置)。
    • [](下标访问)、比较大小(如 <, >)。
  • 典型容器:连续内存容器(如stringvectordeque、数组)。

迭代器关系图示
输入迭代器 → 前向迭代器 → 双向迭代器 → 随机访问迭代器(功能由低到高)
输出迭代器(独立分支)


关键区别

  • 随机访问迭代器效率最高(如 vector 的迭代器)。
  • 输入迭代器是等级最低的迭代器,所有更高级的迭代器(如前向、双向、随机访问迭代器)都兼容输入迭代器的功能。
  • 双向迭代器仅支持逐步移动(如 list)。
  • 算法需根据迭代器类型选择实现(如 算法库中的sort 需要随机访问,而list的双向迭代器不能满足sort随机访问的要求,所以list 需用自己的 sort 方法)。

示例四(拷贝构造):
vector (const vector& x);

#include <vector>
using namespace std;int main()
{vector<int> vec = { 10, 11, 12, 13, 14, 15 }; vector<int> vec1(vec); // 用vec拷贝构造vec1return 0;
}

在这里插入图片描述
示例五(初始化列表构造):
vector ( initializer_list< T > il );

#include <vector>
#include <string>
using namespace std;int main()
{vector<int> vec1{ 1, 2, 3 }; // 调用初始化列表构造vector对象时要使用花括号vector<string> vec2{ "hello", "world" };vector<int> vec3 = { 5, 6, 7 };return 0;
}

在这里插入图片描述

2.vector iterator 的使用

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

接口功能
begin获取第一个数据位置的iterator/const_iterator
end获取最后一个数据的下一个位置的iterator/const_iterator
#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> s1 = { 1,3,5,7,9 };vector<int>::iterator it1 = s1.begin();// 普通vector对象调用 iterator begin();// 返回指向vector对象中第一个元素的普通迭代器,允许修改vector对象中的元素while (it1 != s1.end()){(*it1)++;cout << *it1 << ' ';++it1;}cout << endl;const vector<int> s2 = { 1,3,5,7,9 };vector<int>::const_iterator it2 = s2.begin();// const vector对象调用 const_iterator begin() const;// 返回指向const vector对象第一个元素的const迭代器,只允许读取const vector对象中的元素,不能修改while (it2 != s2.end()){cout << *it2 << ' ';++it2;}cout << endl;return 0;
}

在这里插入图片描述

3.vector类对象的容量操作

在这里插入图片描述

3.1 size、capacity 和 empty的使用

接口功能
size获取数据个数
capacity获取容量大小
empty判断是否为空

(1)size 和 capacity

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> vec1{ 1,2,3,4,5 };cout << "vec1的有效数据个数:" << vec1.size() << endl;cout << "vec1的容量:" << vec1.capacity() << endl;vector<int> vec2{ 6,6,6,6,6,6,6,6,6,6,6};cout << "vec2的有效数据个数:" << vec2.size() << endl;cout << "vec2的容量:" << vec2.capacity() << endl;return 0;
}

在这里插入图片描述

(2)empty

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> vec1{ 1,2,3,4,5 };cout << "vec1是否为空:" << vec1.empty() << endl;vector<int> vec2;cout << "vec2是否为空:" << vec2.empty() << endl;return 0;
}

在这里插入图片描述

3.2 reserve的使用

在这里插入图片描述
std::vector 类提供的 reserve() 成员函数,用于请求vector对象的容量调整。
注:这个函数不会改变vector对象的有效数据个数,也不会修改vector对象有效数据中的内容。

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> v1{ 1,2,3,4,5,6,7,8,9 };cout << "v1的有效数据个数:" << v1.size() << endl;cout << "v1的容量:" << v1.capacity() << endl;v1.reserve(50);cout << "v1的有效数据个数:" << v1.size() << endl;cout << "v1的容量:" << v1.capacity() << endl;return 0;
}

在这里插入图片描述
我们一般只用reserve函数进行扩容,使用场景如下:在你预先知道vector对象将增长到某个大小时,可以使用reserve函数提前分配足够的空间,避免频繁扩容。

3.3 resize的使用

在这里插入图片描述
std::vector类提供的 resize() 成员函数,用于改变有效数据个数。
如果新的个数大于当前个数,会新增有效数据个数,新增元素初始化为 val;如果新的个数小于当前个数,减少有效数据个数。

示例一(新的个数大于当前个数,会新增有效数据个数,新增元素初始化为 val):

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> v1{ 1,2,3 };cout << "v1的有效字符长度:" << v1.size() << endl;cout << "v1的容量:" << v1.capacity() << endl;v1.resize(5, 10);cout << "v1的有效字符长度:" << v1.size() << endl;cout << "v1的容量:" << v1.capacity() << endl;v1.resize(10, 100);cout << "v1的有效字符长度:" << v1.size() << endl;cout << "v1的容量:" << v1.capacity() << endl;return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
示例二(新的个数小于当前个数,减少有效数据个数):

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> v1{ 1,2,3,4,5,6,7,8,9 };cout << "v1的有效字符长度:" << v1.size() << endl;cout << "v1的容量:" << v1.capacity() << endl;v1.resize(5);cout << '\n' << "v1的有效字符长度:" << v1.size() << endl;cout << "v1的容量:" << v1.capacity() << endl;return 0;
}

在这里插入图片描述

4.vector类对象的访问(包含data:返回底层数组的指针)

在这里插入图片描述

接口功能
operator[]返回n位置的数据(越界访问的情况是不确定的)
at()返回n位置的数据(越界访问会抛异常)
data()返回底层数组的指针(C++11)

(1)operator[]
在这里插入图片描述

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> v1{1,2,3,4,5,6,7,8,9};for (size_t i = 0; i < v1.size(); ++i){v1[i] += 1;cout << v1[i] << ' ';// 普通对象调用 int& operator[](size_t n); // 返回vector对象中指定位置数据的引用(int&),// 这意味着你可以通过返回的引用修改数据的内容。}cout << endl;const vector<int> v2{ 1,2,3,4,5,6,7,8,9 };for (size_t i = 0; i < v2.size(); ++i){cout << v2[i] << ' ';// const对象调用 const int& operator[](size_t n) const; // 返回vector对象中指定位置数据的常引用(const int&),// 这意味着你只能读取vector对象中的数据,而无法进行修改。}cout << endl;return 0;
}

在这里插入图片描述
(2)at( )
在这里插入图片描述

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> v1{1,2,3,4,5,6,7,8,9};for (size_t i = 0; i < v1.size(); ++i){v1.at(i) += 1;cout << v1.at(i) << ' ';// 普通对象调用 int& at(size_t n); // 返回vector对象中指定位置数据的引用(int&),// 这意味着你可以通过返回的引用修改数据的内容。}cout << endl;const vector<int> v2{ 1,2,3,4,5,6,7,8,9 };for (size_t i = 0; i < v2.size(); ++i){cout << v2.at(i) << ' ';// const对象调用 const int& at(size_t n) const; // 返回vector对象中指定位置数据的常引用(const int&),// 这意味着你只能读取vector对象中的数据,而无法进行修改。}cout << endl;return 0;
}

在这里插入图片描述
(3)data( )
在这里插入图片描述

#include <vector>
#include <iostream>
using namespace std;int main()
{std::vector<int> myvector(5, 10);cout << "myvector contains:";for (unsigned i = 0; i < myvector.size(); ++i){cout << ' ' << myvector[i];}cout << '\n';int* p = myvector.data();*p = 20;++p;*p += 20;p[2] = 100;cout << "myvector contains:";for (unsigned i = 0; i < myvector.size(); ++i){ cout << ' ' << myvector[i];}cout << '\n';return 0;
}

在这里插入图片描述

5.vector类对象的修改操作

在这里插入图片描述

5.1 push_back、insert(插入数据)

接口功能
push_back在末尾插入一个元素
insert在迭代器 position 位置插入元素

(1)push_back
在这里插入图片描述

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> v1{ 1,1,1,1,1,1,1,1 };for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';v1.push_back(100); // 尾插一个元素for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';return 0;
}

在这里插入图片描述

(2)insert
在这里插入图片描述
示例一(插入多个相同元素):
iterator insert(const_iterator pos, size_t count, const T& val);

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> v1{ 1,1,1,1,1,1,1,1 };for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';v1.insert(v1.begin() + 5, 3, 10);for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';return 0;
}

在这里插入图片描述

示例二(插入范围元素):
template < class InputIterator >
iterator insert(const_iterator pos, InputIterator first, InputIterator last);

#include <vector>
#include <list>
#include <iostream>
using namespace std;int main()
{vector<int> v1{ 1,1,1,1,1,1,1,1 };for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';list<int> lst{ 10,11,12,13,14,15 };v1.insert(v1.begin() + 5, lst.begin(), lst.end());  // list的迭代器是双向迭代器for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';return 0;
}

在这里插入图片描述

示例三(插入初始化列表):
iterator insert(const_iterator pos, initializer_list< T > il);

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> v1{ 1,1,1,1,1,1,1,1 };for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';v1.insert(v1.begin() + 5, { 9,5,2,7 }); // 插入初始化列表for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';return 0;
}

在这里插入图片描述

5.2 pop_back、erase 和 clear(删除数据)

接口功能
pop_back删除末尾元素
erase删除迭代器 pos 指向的元素
clear清空所有有效元素(不释放内存)

(1)pop_back
在这里插入图片描述

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> v1{ 1,2,3,4,5,6,7,8,9 };for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';v1.pop_back();for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';return 0;
}

在这里插入图片描述

(2)erase
在这里插入图片描述
示例一(删除单个元素):

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> v1{ 1,2,3,4,5,6,7,8,9 };for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';v1.erase(v1.begin() + 5); // 删除第6个元素for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';return 0;
}

在这里插入图片描述
示例二(删除范围元素):

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> v1{ 1,2,3,4,5,6,7,8,9 };for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';v1.erase(v1.begin() + 5, v1.end() - 1); //删除第6~8的元素for (unsigned i = 0; i < v1.size(); ++i){cout << ' ' << v1[i];}cout << '\n';return 0;
}

在这里插入图片描述

(3)clear
在这里插入图片描述

#include <vector>
using namespace std;int main()
{vector<int> v1{ 1,2,3,4,5,6,7,8,9 };v1.clear();return 0;
}

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

5.3 成员函数swap

swap成员函数是用于高效交换两个vector对象的内容的函数
在这里插入图片描述

#include <vector>
using namespace std;int main()
{vector<int> v1{ 1,2,3};vector<int> v2{ 10,20,30,40 };v1.swap(v2);return 0;
}

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

6.vector类非成员函数

在这里插入图片描述

6.1 relational operators系列函数

在这里插入图片描述

#include <vector>
using namespace std;int main() 
{vector<int> v1{ 1,2,3 };vector<int> v2{ 1,2,3,4 };vector<int> v3{ 1,3,2 };// == 运算符:元素数量相同且对应元素相等bool b1 = (v1 == v2);  // false(元素数量不同)// != 运算符:存在至少一个不相等元素bool b2 = (v1 != v3);  // true(在第二个元素 2 != 3)// < 运算符:字典序比较,遇到第一个不同元素时判断bool b3 = (v1 < v2);   // true(v1是v2的前缀)bool b4 = (v1 < v3);   // true(在第二个元素 2 < 3)// > 运算符:字典序更大bool b5 = (v2 > v3);   // false(在第二个元素 2 < 3)return 0;
}

在这里插入图片描述

核心原理

  1. 字典序比较

    • 逐个元素对比,直到发现不相等的元素
    • 若一个vector是另一个的前缀,较短的vector更小
    • 元素必须支持operator<(自定义类型需重载)
  2. 类型一致性

    • 只能比较相同类型的vector(vector<int>不能与vector<double>比较)

6.2 非成员函数swap

std::vector的非成员函数swap专门用于交换两个同类型std::vector对象。它底层实际上调用了std::string的swap成员函数。
它在功能上与std::vector的swap成员函数完全一致,但其提供了更为通用的接口。

在这里插入图片描述

#include <vector>
using namespace std;int main()
{vector<int> v1{ 1,2,3};vector<int> v2{ 10,20,30,40 };swap(v1, v2); // 功能上与std::vector的swap成员函数完全一致,但其提供了更为通用的接口return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28600.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大模型】Llama 3.2 大语言模型初探:模型权重下载

文章目录 一、简介二、权重下载2.1 方法一&#xff1a;Meta 官网申请下载2.2 方法二&#xff1a;使用 hugging face 下载 一、简介 Llama&#xff08;Large Language Model Meta AI&#xff09;是 Meta&#xff08;原 Facebook&#xff09;开发的一系列开源大型语言模型。它的目…

python量化交易——金融数据管理最佳实践——使用qteasy大批量自动拉取金融数据

文章目录 使用数据获取渠道自动填充数据QTEASY数据拉取功能数据拉取接口refill_data_source()数据拉取API的功能特性多渠道拉取数据实现下载流量控制实现错误重试日志记录其他功能 qteasy是一个功能全面且易用的量化交易策略框架&#xff0c; Github地址在这里。使用它&#x…

基于SpringBoot的在线骑行网站的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

AORO P9000 PRO三防平板携手RTK高精度定位,电力巡检效率倍增

电网系统覆盖幅员辽阔&#xff0c;每年因设备故障导致的巡检耗时超过百万工日。传统巡检模式受限于定位误差、设备防护不足和作业效率低下三大核心痛点&#xff0c;亟需智能化工具的突破性革新。为了满足这一需求&#xff0c;遨游通讯推出AORO P9000 PRO三防平板&#xff0c;以…

Harbor端口更改||Harbor端口映射

Harbor端口更改|Harbor端口映射 目标&#xff1a;将端口更改为8930 前言 [rootk8s-node1 harbor]# ls common common.sh docker-compose.yml harbor.v2.5.0.tar.gz harbor.yml harbor.yml.tmpl install.sh LICENSE prepare如上是Harbor的文件目录 更改harbor.yml文件…

飞算JavaAI编程工具集成到idea中

AI插件介绍 飞算AI的插件下载地址&#xff0c;里边也有安装步骤&#xff1a; JavaAI 以上图是不是看着很牛的样子&#xff0c;一下成为高手确实说的太夸张了点&#xff0c; 一键生成后端JavaWeb项目还是挺方便的。 飞算JavaAI插件安装 Idea->>file->>setting-&…

51c自动驾驶~合集53

我自己的原文哦~ https://blog.51cto.com/whaosoft/13431196 #DriveTransformer 上交提出&#xff1a;以Decoder为核心的大一统架构写在前面 & 笔者的个人理解 当前端到端自动驾驶架构的串行设计导致训练稳定性问题&#xff0c;而且高度依赖于BEV&#xff0c;严重限…

Pytorch系列教程:模型训练的基本要点

PyTorch是一个开源的机器学习库&#xff0c;由于其灵活性和动态计算图而迅速流行起来。在PyTorch中训练模型是任何数据科学家或机器学习工程师的基本技能。本文将指导您完成使用PyTorch训练模型所需的基本步骤。 总体说明 模型训练流程主要包括数据准备、网络构建、优化配置及…

NVIDIA(英伟达) GPU 芯片架构发展史

GPU 性能的关键参数 CUDA 核心数量&#xff08;个&#xff09;&#xff1a;决定了 GPU 并行处理能力&#xff0c;在 AI 等并行计算类业务下&#xff0c;CUDA 核心越多性能越好。 显存容量&#xff08;GB&#xff09;&#xff1a;决定了 GPU 加载数据量的大小&#xff0c;在 AI…

汽车免拆诊断案例 | 2023款丰田雷凌汽油版车行驶中偶尔出现通信故障

故障现象  一辆2023款丰田雷凌汽油版车&#xff0c;搭载1.5 L发动机&#xff0c;累计行驶里程约为4700 km。车主反映&#xff0c;行驶中偶尔组合仪表上的发动机转速信号丢失&#xff0c;转向变重&#xff0c;且有“闯车”感&#xff0c;同时车辆故障警报蜂鸣器鸣响。 故障诊断…

鸿蒙与DeepSeek深度整合:构建下一代智能操作系统生态

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/north 目录 技术融合背景与价值鸿蒙分布式架构解析DeepSeek技术体系剖析核心整合架构设计智能调度系统实现…

AutoGen学习笔记系列(七)Tutorial - Managing State

这篇文章瞄准的是AutoGen框架官方教程中的 Tutorial 章节中的 Managing State 小节&#xff0c;主要介绍了如何对Team内的状态管理&#xff0c;特别是如何 保存 与 加载 状态&#xff0c;这对于Agent系统而言非常重要。 官网链接&#xff1a;https://microsoft.github.io/auto…

cenos7网络安全检查

很多网络爱好者都知道&#xff0c;在Windows 2000和Windows 9x的命令提示符下可使用Windows系统自带的多种命令行网络故障检测工具&#xff0c;比如说我们最常用的ping。但大家在具体应用时&#xff0c;可能对这些命令行工具的具体含义&#xff0c;以及命令行后面可以使用的种…

MagicDriveDiT:具有自适应控制的自动驾驶高分辨率长视频生成

24年11月来自香港中文大学、香港科技大学和华为公司的论文“MagicDriveDiT: High-Resolution Long Video Generation for Autonomous Driving with Adaptive Control”。 扩散模型的快速进步极大地改善视频合成&#xff0c;特别是可控视频生成&#xff0c;这对于自动驾驶等应用…

大模型架构记录1

整体的学习架构 一 模型构建和应用 1 训练数据 &#xff08;重点&#xff09; 2 模型设计 (transformer) 3 模型训练 (fine-tuning 微调) (产品经理后面可能能做) 4 benchmark (评测) 5 memory &#xff08;内存&#xff09;(知识图谱&#xff0c;向量数据库) 6 搜索技…

【Liunx专栏_3】Liunx进程概念知识点

文章目录 前言1、冯诺依曼体系结构2、操作系统2.1、系统调用 3、进程3.1、进程概念3.2、进程描述—PCB3.3、查看进程信息3.4、通过系统调用获取进程标识符3.5、通过系统调用创建子进程—fork() 4、进程状态5、僵尸进程6、孤儿进程7、进程优先级7.1、PRI和NI是什么&#xff1f;7…

Nacos简介、安装与使用(保姆级教程!!!)

目录 一、Nacos 简介 1. 什么是 Nacos 2. Nacos 的核心功能 3. Nacos 的优势 二、Nacos 安装 1. 环境准备 2. 下载 Nacos 3. 解压安装包 4. 启动 Nacos 三、Nacos 使用 1. 服务注册与发现 &#xff08;1&#xff09;引入依赖 &#xff08;2&#xff09;配置 Nacos…

多线程JUC(二)

目录 一、等待唤醒机制1.生产者消费者2.阻塞队列3.线程的状态 二、线程池1.理解与使用2.自定义线程池 三、线程池额外知识 一、等待唤醒机制 1.生产者消费者 等待唤醒机制可以简单的理解为下图。厨师相当于生产者&#xff0c;吃货相当于消费者。当桌子&#xff08;缓冲区&…

【仿muduo库one thread one loop式并发服务器实现】

文章目录 一、项目介绍1-1、项目总体简介1-2、项目开发环境1-3、项目核心技术1-4、项目开发流程1-5、项目如何使用 二、框架设计2-1、功能模块划分2-1-1、SERVER模块2-1-2、协议模块 2-2、项目蓝图2-2-1、整体图2-2-2、模块关系图2-2-2-1、Connection 模块关系图2-2-2-2、Accep…

关于tresos Studio(EB)的MCAL配置之GPT

概念 GPT&#xff0c;全称General Purpose Timer&#xff0c;就是个通用定时器&#xff0c;取的名字奇怪了点。定时器是一定要的&#xff0c;要么提供给BSW去使用&#xff0c;要么提供给OS去使用。 配置 General GptDeinitApi控制接口Gpt_DeInit是否启用 GptEnableDisable…