C++面向对象程序设计-北京大学-郭炜【课程笔记(十一)】

C++面向对象程序设计-北京大学-郭炜【课程笔记(十一)】

  • 1、string(重要知识点)
    • 1.2、string的赋值和链接
    • 1.3、比较string
    • 1.4、子串
    • 1.5、交换string
    • 1.6、寻找string中的字符
    • 1.7、删除string中的字符
    • 1.8、替换string中的字符
    • 1.9、在string中插入字符(重要)
    • 1.10、转换成C语言式char * 字符串
    • 1.11、字符串流处理
    • 1.12、字符串流处理-字符串输出流istringstream
  • 2、标准模板库STL
    • 1.1、STL的基本概念
    • 1.2、容器概述
    • 2.3、顺序容器
  • 3、迭代器
    • 2.1、迭代器的定义与使用
    • 2.2、双向迭代器
    • 2.3、随机访问迭代器
  • 4、算法简介
    • find()函数原型
    • 参数
    • 返回值
    • 使用方法
    • 示例
      • 示例1:在 `vector` 中查找元素
      • 示例2:在 `list` 中查找元素
      • 示例3:在数组中查找元素
      • 注意事项
      • 小结
  • 5、STL中“大” “小”的概念
    • 5.1、重要说明

做毕业答辩变PPT脱了几天,终于要结束读书生涯了,哈哈。
开始课程:P40 1_1. string类
课程链接:程序设计与算法(三)C++面向对象程序设计 北京大学 郭炜
课程PPT:github提供的对应课程PPT

1、string(重要知识点)

学了string类就可以不用char*类当字符串用了。

string类:

  • string类是模板类
    • typedef basic_string<char> string;
  • 使用string类要包含头文件#include<string>
  • string对象的初始化:
    • string s1(“Hello”);
    • string month = “March”;
    • string s2(8, ‘x’); // 8个x

注意事项:错误的初始化方式:

  • string error1 = 'c'; // 错(直接用一个字符初始化一个string对象是不可以的)
  • 可以将字符赋值给string对象;
    • string s;
    • s = ‘c’; // OK
  • string error2(‘u’); // 错
  • string error3 = 22; // 错
  • string error4(8); // 错
#include<iostream>
#include<string>
using namespace std;int main(int argc, char * argv[])
{string s1("hello");cout << s1 << endl;      // hellostring s2(8, 'x');       cout << s2 << endl;      // xxxxxxxxstring month = "March"; cout << month << endl;   // Marchstring s;s = 'n';cout << s << endl;       // nreturn 0;
}
  • string对象的长度用成员函数length()读取;
    • string s(“hello”);
  • cout << s.length() << endl;
  • string支持流读取运算符
    • string stringObject;
    • cin >> stringObject;
  • string支持getline函数
    • string s;
    • getline(cin, s);
  • 用 = 赋值
    • string s1(“cat”), s3;
    • s2 = s1;
  • 用assign长远函数赋值
    • string s1(“cat”), s3;
    • s3.assign(s1);
  • 用assign成员函数部分复制
    • string s1(“catpig”), s3;
    • s3.assign(s1, 1, 3);
    • // 从s1中下标为1的字符开始复制3个字
  • 耽搁字符复制
    • s2[5] = s1[3] = ‘a’;
  • 逐个访问string对象中的字符
    • string s1(“Hello”);
    • for(int i=0; i<s1.length(); i++)
    • {cout << s1.at(i) << endl;}
  • 成员函数at会做范围检查,如果超出范围,会抛出out_of_renge异常,而下标运算符[]不做范围检查。

1.2、string的赋值和链接

  • 用+运算符连接字符串
    • string s1(“good”), s2(“morning!”);
    • s1 += s;
    • cout << s1;
  • 用成员函数append连接字符串
    • string s1(“good”), s2(“morning!”);
    • s1.append(s2);
    • cout << s1;
    • s2.append(s1, 3, s1.size()); //s1.size(), s1字符数
    • cout << s2;
    • // 下标为3开始,s1.size()个字符,如果字符穿内没有足够字符,则复制到字符串最后一个字符

1.3、比较string

  • 用关系运算符比较string的大小
    • 返回值都是bool类型,成立返回true,否则返回false
    • 例如:
#include<iostream>
#include<string>
using namespace std;int main(int argc, char * argv[])
{string s1("hello"), s2("hello"), s3("hello");bool b = (s1 == s2);cout << b << endl;b = (s1 == s3);cout << b << endl;b = (s1 > s3);cout << b << endl;return 0;
}
// OUT
1
1
0
  • 用成员函数compare比较string的大小
    例题1:
#include <iostream>
#include <string>
#include <cctype>
using std::cout;
using std::endl;
using std::cin;
using std::string;
int main(void){string str1="hi,test,hello";string str2="hi,test";//字符串比较if(str1.compare(str2)>0)printf("str1>str2\n");else if(str1.compare(str2)<0)printf("str1<str2\n");elseprintf("str1==str2\n");//str1的子串(从索引3开始,包含4个字符)与str2进行比较if(str1.compare(3,4,str2)==0)printf("str1的指定子串等于str2\n");elseprintf("str1的指定子串不等于str2\n");//str1指定子串与str2的指定子串进行比较if(str1.compare(3,4,str2,3,4)==0)printf("str1的指定子串等于str2的指定子串\n");elseprintf("str1的指定子串不等于str2的指定子串\n");//str1指定子串与字符串的前n个字符进行比较if(str1.compare(0,2,"hi,hello",2)==0)printf("str1的指定子串等于指定字符串的前2个字符组成的子串\n");elseprintf("str1的指定子串不等于指定字符串的前2个字符组成的子串\n");return 0;
}
// OUT:
str1>str2
str1的指定子串不等于str2
str1的指定子串等于str2的指定子串
str1的指定子串等于指定字符串的前2个字符组成的子串

例题2:

#include<iostream>
#include<string>
using namespace std;int main(int argc, char * argv[])
{string s1("hello"), s2("hello"), s3("hell");int f1 = s1.compare(s2);   // 0  // hello == helloint f2 = s1.compare(s3);   // 1  // hello > hellint f3 = s3.compare(s1);   // -1 // hell < helloint f4 = s1.compare(1, 2, s3);    // -3 int f5 = s1.compare(0, s1.size(), s3);  // 1cout << f1 << endl << f2 << endl << f3 << endl;cout << f4 << endl << f5 << endl;return 0;
}

注意事项:C++中int f4 = s1.compare(1, 2, s3);结果显示为-3,为什么

在 C++ 的 std::string 类中,compare 函数的第一个参数是起始位置,第二个参数是要比较的长度,第三个参数是要比较的字符串。当调用 s1.compare(1, 2, s3) 时,表示从 s1 的索引位置 1 开始,比较长度为 2 的子字符串与 s3 的内容。如果 s1 的子字符串小于 s3,则返回值为负数,且返回值的绝对值表示两个字符串第一个不相等字符的 ASCII 码差值的相反数。因此,结果为 -3 表示在比较的过程中,第一个不相等字符在 ASCII 码上 s1 的子字符串要小于 s3

1.4、子串

  • 成员函数substr
string s1("hello world"), s2;
s2 = s1.substr(4,5);  // 下标4开始5个字符
cout << s2 << endl;  // 输出:o wor

1.5、交换string

  • 成员函数swap
string s1("hello world"), s2("really");
s1.swap(s2);
cout << s1 << endl;  // really
cout << s2 << endl;  // hello world

1.6、寻找string中的字符

  • 成员函数find()
    • string s1(‘hello world’);
    • s1.find(“lo”);
    • 在s1中从前向后查找“lo“第一次出现的地方,如果找到,返回”lo“开始的位置,即I所在的位置下标。如果找不到,返回string::npos(string 中定义的京塔常量)。
      请添加图片描述
      在这里插入图片描述请添加图片描述
      请添加图片描述

请添加图片描述

1.7、删除string中的字符

  • 成员函数erase()
    • string s1(“hello world”);
    • s1.erase(5);
    • cout << s1; // hello
    • cout << s1.length(); // 5
    • cout << s1.size(); // 5
      // 去掉下标5及之后的字符
      // 输出:hello55

1.8、替换string中的字符

  • 成员函数replace()
    • string s1(“hello world”);
    • s1.replace(2,3, “haha”);
    • cout << s1; // hehaha world
    • // 将s1中下标2开始的3个字符换成“haha”

1.9、在string中插入字符(重要)

请添加图片描述

1.10、转换成C语言式char * 字符串

  • 在C++中,c_str()函数用于返回一个指向以空字符结尾的数组的指针,该数组包含了作为 std::string 对象内容的字符序列的副本。这个函数通常用于将 std::string 对象转换为 C 风格的字符串(以空字符结尾的字符数组),以便与需要使用 C 风格字符串的函数进行交互。注意,返回的指针指向的字符数组是 const char* 类型的,因此不能直接修改该数组的内容。
    请添加图片描述
  • 在C++中,data()函数用于返回一个指向 std::string 对象中存储的字符数据的指针。与c_str()函数不同,data()函数不会在字符串的末尾添加空字符(‘\0’),因此返回的指针可以用于修改字符串的内容。需要注意的是,在修改返回的指针所指向的字符串时,要确保不会超出字符串的长度,否则会导致未定义的行为。
    请添加图片描述

1.11、字符串流处理

请添加图片描述

#include<string>
#include<iostream>
#include<sstream>
using namespace std;int main()
{string input("Input test 123 4.7 A");istringstream inputString(input);string string1, string2;int i;double d;char c;inputString >> string1 >> string2 >> i >> d >> c;cout << string1 << endl << string2 << endl;cout << i << endl << d << endl << c << endl;long L;if(inputString >> L){cout << "long\n";}else cout << "empty\n";
}
// OUT
Input
test
123
4.7
A
empty

这段代码使用了C++的字符串流类istringstream来解析一个字符串input。下面是对代码的逐行解释:

  1. #include<string>:包含了C++标准库中的string头文件,提供了字符串操作的功能。
  2. #include<iostream>:包含了C++标准输入输出流的头文件,提供了输入输出功能。
  3. #include<sstream>:包含了C++标准库中的字符串流头文件,提供了字符串流的功能。
  4. using namespace std;:使用了命名空间std,这样就可以直接使用标准库中的类和函数,而不需要加上std::前缀。
  5. string input("Input test 123 4.7 A");:定义了一个字符串input,内容为"Input test 123 4.7 A"
  6. istringstream inputString(input);:定义了一个字符串流inputString,并将input作为初始化参数。
  7. string string1, string2;:定义了两个字符串变量string1string2
  8. int i;:定义了一个整型变量i
  9. double d;:定义了一个双精度浮点型变量d
  10. char c;:定义了一个字符型变量c
  11. inputString >> string1 >> string2 >> i >> d >> c;:使用字符串流inputString依次读取字符串、字符串、整型、双精度浮点型和字符,分别赋值给string1string2idc
  12. cout << string1 << endl << string2 << endl;:输出变量string1string2的值,并换行。
  13. cout << i << endl << d << endl << c << endl;:输出变量idc的值,并换行。
  14. long L;:定义了一个长整型变量L
  15. if(inputString >> L):尝试从字符串流inputString中读取一个长整型值到变量L中,如果成功读取则执行下面的代码块,否则执行else中的代码块。
  16. { cout << "long\n"; }:如果成功读取了长整型值,则输出"long"并换行。
  17. else cout << "empty\n";:如果未能成功读取长整型值,则输出"empty"并换行。

这段代码的功能是将字符串input中的各个部分分别解析为不同类型的变量,并输出它们的值。

1.12、字符串流处理-字符串输出流istringstream

#include<string>
#include<iostream>
#include<sstream>
using namespace std;int main()
{ostringstream outputString;int a = 10;outputString << "This" << a << "ok" << endl;cout << outputString.str();  //This10okreturn 0;
}
// OUT
This10ok

这段代码演示了如何使用 ostringstream 类来构建一个字符串流,并将各种类型的数据写入其中,最后将其作为一个字符串输出到标准输出流中。

  1. ostringstream outputString;:创建一个 ostringstream 对象 outputString,用于构建一个字符串流。

  2. outputString << "This" << a << "ok" << endl;:使用 << 操作符将字符串 "This"、整数 a 和字符串 "ok" 以及换行符 endl 依次写入到 outputString 中。

  3. cout << outputString.str();:使用 str() 方法获取 outputString 中的字符串内容,并将其输出到标准输出流 cout 中。

  4. return 0;:返回主函数的结束。

2、标准模板库STL

请添加图片描述请添加图片描述

1.1、STL的基本概念

请添加图片描述在这里插入图片描述

1.2、容器概述

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

2.3、顺序容器

在这里插入图片描述
请添加图片描述在这里插入图片描述
请添加图片描述请添加图片描述
请添加图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

3、迭代器

2.1、迭代器的定义与使用

定义一个容器类的迭代器的方法可以是:

  • 容器类名::iterator 变量名;
  • 容器类名::const_iterator 变量名;

访问一个迭代器指向的元素:

  • * 迭代器变量名

迭代器上可以执行++操作,以使其指向容器中的下一个元素。如果迭代器到达了容器中的最后一个元素的后面,此时再使用它,则会报错,类似于使用NULL或未初始化的指针一样。
例题:

#include<vector>
#include<iostream>
using namespace std;int main()
{vector<int> v;  // 一个存放int元素的数组,一开始里面没有元素v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4);vector<int>::const_iterator i;  // 常用迭代器for(i = v.begin(); i != v.end(); i++){cout << *i << ",";   // 1,2,3,4,}cout << endl;vector<int>::reverse_iterator r;  // 反向迭代器for(r = v.rbegin(); r!=v.rend(); r++){cout << *r << ",";  // 4,3,2,1,}cout << endl;vector<int>::iterator j; // 非常量迭代器for(j=v.begin(); j != v.end(); j++)*j = 100;  // 容器中数组每个元素赋值100for(i=v.begin(); i != v.end(); i++)cout << *i << ",";   // 100,100,100,100
}
// OUT
STL % ./1
1,2,3,4,
4,3,2,1,
100,100,100,100

2.2、双向迭代器

在这里插入图片描述

2.3、随机访问迭代器

在这里插入图片描述

p<p1的含义:p指向的这个元素他在p1所指向这个元素的前面。

vector的迭代器是随机迭代器,遍历vector可以有以下几种做法(deque亦然):
#include<vector>
#include<iostream>
using namespace std;int main()
{vector<int> v(5); // 创建一个包含100个元素的整数向量,默认初始化为0int i;for(i=0;i<v.size();i++) // 使用下标遍历vectorcout << v[i];  // 根据下标随机访问,并输出每个元素cout << ";" << endl;// 定义一个常量迭代器ii,通过for循环遍历向量v,并输出每个元素。vector<int>::const_iterator ii; for(ii=v.begin(); ii != v.end(); ii++) // 使用常量迭代器遍历vectorcout << *ii;  // 输出迭代器指向的元素cout << ";" << endl;for(ii = v.begin(); ii < v.end(); ii++) // 使用常量迭代器遍历vector(条件使用<)cout << *ii;  // 输出迭代器指向的元素cout << ";" << endl;// 间隔一个元素输出ii= v.begin();while(ii < v.end()) // 迭代器方式间隔输出{cout << *ii;  // 输出当前迭代器指向的元素ii = ii + 2;  // 将迭代器向前移动两个位置}return 0;
}
// OUT
00000;
00000;
00000;
0
0
0
list的迭代器是双向迭代器,正确遍历list的方法如下:

请添加图片描述

4、算法简介

在这里插入图片描述
在这里插入图片描述
C++ 中的 find() 函数用于在容器(如数组、vectorlist 等)中查找特定元素。它是 <algorithm> 头文件中的一个标准算法。下面是 find() 函数的详细介绍,包括其使用方法和例子。

find()函数原型

find() 函数有多个重载版本,最常用的版本如下:

template< class InputIt, class T >
InputIt find( InputIt first, InputIt last, const T& value );

参数

  • first:指向输入范围的起始位置的迭代器。
  • last:指向输入范围的结束位置的迭代器(不包含在范围内)。
  • value:要查找的元素的值。

返回值

  • 如果找到匹配的元素,返回指向该元素的迭代器。
  • 如果没有找到匹配的元素,返回 last

使用方法

find() 函数遍历从 firstlast 范围内的元素,比较每个元素与 value 是否相等。如果找到相等的元素,则返回一个指向该元素的迭代器;否则,返回一个指向 last 的迭代器。

示例

以下是 find() 函数的几个使用示例。

示例1:在 vector 中查找元素

#include <iostream>
#include <vector>
#include <algorithm> // 包含 find() 函数的头文件int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 查找元素3auto it = std::find(vec.begin(), vec.end(), 3);// std::distance(vec.begin(), it) 是 C++ 标准库中的一个实用函数,用于计算两个迭代器之间的距离(即元素的数量)。if (it != vec.end()) {std::cout << "Found element 3 at position: " << std::distance(vec.begin(), it) << std::endl;} else {std::cout << "Element 3 not found." << std::endl;}return 0;
}

输出:

Found element 3 at position: 2

示例2:在 list 中查找元素

#include <iostream>
#include <list>
#include <algorithm> // 包含 find() 函数的头文件int main() {std::list<int> lst = {10, 20, 30, 40, 50};// 查找元素30auto it = std::find(lst.begin(), lst.end(), 30);if (it != lst.end()) {std::cout << "Found element 30." << std::endl;} else {std::cout << "Element 30 not found." << std::endl;}return 0;
}

输出:

Found element 30.

示例3:在数组中查找元素

#include <iostream>
#include <algorithm> // 包含 find() 函数的头文件int main() {int arr[] = {5, 10, 15, 20, 25};// 查找元素20auto it = std::find(std::begin(arr), std::end(arr), 20);if (it != std::end(arr)) {std::cout << "Found element 20 at position: " << (it - std::begin(arr)) << std::endl;} else {std::cout << "Element 20 not found." << std::endl;}return 0;
}

输出:

Found element 20 at position: 3
#include<vector>
#include<algorithm>
#include<iostream>using namespace std;int main()
{// find 算法示例int array[10] = {10,20,30,40};vector<int>v;v.push_back(1); v.push_back(2);v.push_back(3); v.push_back(4);vector<int>::iterator p;p = find(v.begin(), v.end(), 3);if(p != v.end()){cout << *p << endl;  // 输出3}p = find(v.begin(), v.end(), 9);if(p==v.end())cout << "not found " << endl;p = find(v.begin()+1, v.end()-2, 1); // 整个容器:[1,2,3,4],查找区间:[2,3)if(p != v.end())cout << *p << endl;int *pp = find(array, array+4, 20);  // 数组名是迭代器cout << * pp << endl;
}
输出:
3
not found 
3
20

注意事项

  • find() 函数使用的是元素的相等比较运算符 ==,因此要查找的元素类型必须支持该运算符。
  • find() 函数只能用于支持输入迭代器的范围。
  • 如果要查找的容器是有序的,可以考虑使用更高效的算法,如 std::binary_searchstd::lower_bound

小结

find() 函数是一个简单而强大的工具,用于在各种容器中查找元素。它的使用非常直观,通过传递开始和结束迭代器,以及要查找的值,即可轻松找到目标元素。在实际应用中,可以结合其他算法和数据结构,根据具体需求选择合适的查找方法。

5、STL中“大” “小”的概念

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

#include <iostream>
#include <algorithm>
using namespace std;class A
{int v;
public:A(int n) : v(n) {}bool operator < (const A& a2) const{cout << v << "<" << a2.v << "?" << endl;return false;// return v < a2.v; // 修改返回值为比较实际数值}bool operator == (const A& a2) const{cout << v << "==" << a2.v << "?" << endl;return v == a2.v;}
};int main()
{A a[] = {A(1), A(2), A(3), A(4), A(5)};// 修改为搜索整个数组范围// boolalpha:使 cout 输出布尔值时,显示 true 或 false 而不是 1 或 0。cout << boolalpha << binary_search(a, a + 5, A(9)) << endl; // 折半查找return 0;
}

代码逐行解释:
下面是对你提供的代码进行逐行解释:

#include <iostream>
#include <algorithm>
using namespace std;
  • #include <iostream>:包含输入输出流的头文件,用于输入输出操作,如cout
  • #include <algorithm>:包含标准库算法的头文件,用于调用binary_search函数。
  • using namespace std;:使用标准命名空间,避免在使用标准库对象时每次都加std::前缀。
class A
{int v;
public:A(int n) : v(n) {}bool operator < (const A& a2) const{cout << v << "<" << a2.v << "?" << endl;return false;// return v < a2.v; // 修改返回值为比较实际数值}bool operator == (const A& a2) const{cout << v << "==" << a2.v << "?" << endl;return v == a2.v;}
};
  • 定义一个类 A,表示一个包含整数成员变量 v 的类。
  • int v;:私有成员变量,存储整数值。
  • A(int n) : v(n) {}:构造函数,初始化成员变量 v 为传入的参数 n
  • bool operator < (const A& a2) const:重载小于运算符,用于比较两个 A 对象。输出比较信息,但总是返回 false(此处注释掉了实际的比较逻辑 return v < a2.v;)。
  • bool operator == (const A& a2) const:重载等于运算符,用于比较两个 A 对象。输出比较信息,并返回两个对象的 v 值是否相等。
int main()
{A a[] = {A(1), A(2), A(3), A(4), A(5)};// 修改为搜索整个数组范围cout << boolalpha << binary_search(a, a + 5, A(9)) << endl; // 折半查找return 0;
}
  • int main():主函数,程序执行的入口。
  • A a[] = {A(1), A(2), A(3), A(4), A(5)};:创建一个 A 对象数组,包含五个元素,每个元素的 v 值分别为 1, 2, 3, 4, 5
  • cout << boolalpha << binary_search(a, a + 5, A(9)) << endl;
    • binary_search(a, a + 5, A(9)):在数组 a 中使用二分查找法查找是否存在值为 9A 对象。
    • boolalpha:使 cout 输出布尔值时,显示 truefalse 而不是 10
    • 将查找结果输出到控制台,并换行。

5.1、重要说明

  • 当前的 operator < 函数总是返回 false,这会导致 binary_search 函数无法正确比较对象,因此始终返回 false。要使 binary_search 函数正常工作,需将 operator < 的实现改为实际比较数值,如下所示:
    bool operator < (const A& a2) const
    {cout << v << "<" << a2.v << "?" << endl;return v < a2.v;
    }
    
    这样可以正确地进行比较,并使二分查找能够正确地工作。

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

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

相关文章

结构体;结构成员访问操作符

结构体&#xff1a; 虽然c语言已经提供了内置类型&#xff0c;比如&#xff1a;char、short、int、long等&#xff0c;但还是不够用&#xff0c;就好比我描述一个人&#xff0c;我需要描述他的身高&#xff0c;体重&#xff0c;年龄&#xff0c;名字等信息&#xff0c…

微软密谋超级AI大模型!LangChain带你轻松玩转大模型开发

此前&#xff0c;据相关媒体报道&#xff0c;微软正在研发一款名为MAI-1的最新AI大模型&#xff0c;其参数规模或将达5000亿以上&#xff0c;远超此前微软推出的相关开源模型&#xff0c;其性能或能与谷歌的Gemini 1.5、Anthropic的Claude 3和OpenAI的GPT-4等知名大模型相匹敌。…

Linux文本处理三剑客(详解)

一、文本三剑客是什么&#xff1f; 1. 对于接触过Linux操作系统的人来说&#xff0c;应该都听过说Linux中的文本三剑客吧&#xff0c;即awk、grep、sed&#xff0c;也是必须要掌握的Linux命令之一&#xff0c;三者都是用来处理文本的&#xff0c;但侧重点各不相同&#xff0c;a…

Sam Altman微软Build 2024最新演讲:AI可能是下一个移动互联网

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

【C++11】lambda匿名函数和包装器

目录 一&#xff0c;lambda匿名函数 1-1&#xff0c;lambda的引入 1-2&#xff0c;lambda表达式书写格式 1-3&#xff0c;lambda函数的名称 1-4&#xff0c;lambda捕获列表的使用 1-5&#xff0c;函数对象与lambda表达式 二&#xff0c;包装器 2-1&#xff0c;function…

如何使用maven运行SpringBoot程序?

目录 一、什么是maven 二、什么是SpringBoot 三、如何使用maven运行SpringBoot程序&#xff1f; 一、什么是maven Maven&#xff1a;简化Java项目构建的自动化工具 在软件开发的世界里&#xff0c;Maven以其强大的项目管理和构建自动化功能&#xff0c;为Java开发者提供了…

容器化:ES和Kibana

1 缘起 最近在学习使用ES&#xff0c; 为了找一个功能强大的可视化工具&#xff0c;之前使用了ES-Head&#xff0c;可以满足学习需求。 闲暇时间又折腾了另一个工具Kibana&#xff0c; 分享如下。 Kibana优点&#xff1a; 用户友好性&#xff1a;Kibana提供直观易用的用户界面…

Strategy设计模式

Strategy设计模式举例。 看图&#xff1a; 代码实现&#xff1a; #include <iostream>using namespace std;class FlyBehavior { public:virtual void fly() 0; };class QuackBehavior { public:virtual void quack() 0; };class FlyWithWings :public FlyBehavior …

数据库(vb.net+OleDB+Access)简易学生信息管理系统

在我们日常生活当中&#xff0c;数据库一词往往离不开我们的编程界&#xff0c;在学校、仓库等方面起着存储数据及数据关系作用的文件。相较于Excel&#xff0c;Access可以存储无限多的记录&#xff0c;内容也十分丰富&#xff0c;例如文本、数字、日期、T&F等。而且不需要…

k8s命令式对象管理和配置

kubectl补全: # dnf install -y bash-completion # echo "source <(kubectl completion bash)" >> ~/.bashrc # kubectl completion bash > /etc/bash_completion.d/kubectl 命令式对象管理 kubectl命令 # 查看所有pod kubectl get pod # 查看某个po…

LLM——探索大语言模型在心理学方面的应用研究

1. 概述 心理学经历了多次理论变革&#xff0c;目前人工智能&#xff08;AI&#xff09;和机器学习&#xff0c;特别是大型语言模型&#xff08;LLMs&#xff09;的使用&#xff0c;预示着新研究方向的开启。本文详细探讨了像ChatGPT这样的LLMs如何转变心理学研究。它讨论了LL…

docker- 镜像 导出导入

文章目录 前言docker- 镜像 导出导入1. 导出2. 删除镜像3. 导入镜像 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&…

忘记“也是一门学问:机器如何忘记自己学到的知识?

在信息时代&#xff0c;我们常常希望人工智能能够学到更多的知识&#xff0c;变得更加智能。但你是否想过&#xff0c;有时候让机器"忘记"一些它学到的东西&#xff0c;也是一件很重要的事&#xff1f; 随着用户隐私保护意识的提高和相关法律法规的出台&#xff0c;…

深入理解内联函数(C语言)

目录 1.什么是内联函数2.内联函数与宏3.编译器对内联函数的处理4.参考文献 1.什么是内联函数 很多人都会知道&#xff0c;可以将比较小的函数写成内联函数的形式&#xff0c;这样会节省函数调用的开销&#xff0c;具体是什么样的开销呢&#xff1f; 一个函数在执行过程中&…

IDEA通过tomcat运行注意事项

配置run--》edit configurations 以下的A B部分要保持一致 A和B的路径要保持一致

前端vue项目遇到的问题01——那些初级问题

前端vue项目遇到的问题01——那些初级问题 1. npm install 问题1.1 依赖冲突1.1.1 详细问题1.1.2 报错原因1.1.3 解决问题1.1.3.1 方式1——无视冲突1.1.3.1 方式2——更换依赖版本 1.2 nodejs版本问题1.3 node版本正确的情况&#xff08;audit问题&#xff09;&#xff08;这个…

HTML5新特性、JS【初识JS 、JS核心语法】--学习JavaEE的day47

day47 HTML5新特性 定义文档类型 在文件的开头总是会有一个标签 语言文档类型声明方式html4<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">html5<!DOCTYPE html> 新增语义化标签 理解&…

vite-plugin-vue-devtools插件

vite-plugin-vue-devtools插件旨在帮助开发者更快地理解并调试Vue应用。它通过提供全面的功能和直观的界面&#xff0c;以图形化的方式展示应用程序状态&#xff0c;使开发者能够更方便地查看和管理Vue应用的各个方面。此外&#xff0c;该插件还支持Vue3.0版本&#xff0c;并且…

【Go专家编程——内存管理——垃圾回收】

垃圾回收 所谓的垃圾就上不在需要的内存块&#xff0c;垃圾如果不清理&#xff0c;这些内存块就没有办法再次被分配使用。在不支持垃圾回收的编程语言中&#xff0c;这些垃圾内存就上泄露的内存。 1. 垃圾回收算法 常见的垃圾回收算法有3种 引用计数&#xff1a;对每个对象…

yolov10 快速使用及训练

参考: https://docs.ultralytics.com/models/yolov10/ ultralytics其实大多数系列都能加载使用: 官方: https://github.com/THU-MIG/yolov10.git 代码参考: https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/train-yolov10-object-…