【C++提高编程-10】----C++ STL常用拷贝和替换算法

2024-06-19 11:44

本文主要是介绍【C++提高编程-10】----C++ STL常用拷贝和替换算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🎩 欢迎来到技术探索的奇幻世界👨‍💻

📜 个人主页:@一伦明悦-CSDN博客

✍🏻 作者简介: C++软件开发、Python机器学习爱好者

🗣️ 互动与支持💬评论      👍🏻点赞      📂收藏     👀关注+

如果文章有所帮助,欢迎留下您宝贵的评论,

点赞加收藏支持我,点击关注,一起进步!

前言

       STL(Standard Template Library)是C++标准库的一部分,提供了丰富的数据结构和算法,用于处理数据和实现常见的计算任务。STL中的算法分为几类,包括遍历算法、修改算法、排序算法、查找算法、数值算法等,每类算法都有其特定的应用场景和功能。

正文

01-拷贝和替换算法之copy用法

      在 C++ 的 STL(Standard Template Library)中,提供了一系列的算法来操作容器和序列。其中,拷贝和替换算法是常见的操作之一,它们能够方便地在容器或序列之间进行数据的复制或替换。本文将重点介绍 std::copy 算法的用法和示例。

1. std::copy 简介

std::copy 算法用于将一个序列的元素复制到另一个序列中。它的原型定义在 <algorithm> 头文件中,并且通常与迭代器一起使用,允许在不同容器类型之间或同一容器内不同位置之间进行数据的复制操作。

2. std::copy 函数签名

template< class InputIt, class OutputIt >
OutputIt copy( InputIt first, InputIt last, OutputIt d_first );
  • firstlast:定义了输入序列的起始和结束位置(包括起始,但不包括结束)。
  • d_first:定义了输出序列的起始位置,即从这里开始复制数据。

3. 参数说明

  • InputIt:表示输入序列的迭代器类型,通常是指向要复制的容器的迭代器。
  • OutputIt:表示输出序列的迭代器类型,通常是指向目标容器或输出位置的迭代器。

4. 使用示例

下面通过一个简单的示例来说明 std::copy 的具体用法。

#include <iostream>
#include <algorithm>
#include <vector>int main() {std::vector<int> source = {1, 2, 3, 4, 5};std::vector<int> destination(5);  // 目标容器,预先分配空间// 使用 std::copy 将 source 中的元素复制到 destination 中std::copy(source.begin(), source.end(), destination.begin());// 输出目标容器中的元素,验证复制结果for (int num : destination) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

5. 示例解释

  • 首先,我们定义了一个 source 容器,其中包含了整数 {1, 2, 3, 4, 5}
  • 然后,我们创建了 destination 容器,它的大小与 source 相同,并预先分配了足够的空间来存放复制后的数据。
  • 在 std::copy 调用中,我们传递了 source.begin() 和 source.end() 作为输入范围,并且传递了 destination.begin() 作为输出起始位置。这样,source 中的所有元素被复制到了 destination 中。
  • 最后,通过简单的循环输出,我们验证了 destination 中的元素确实与 source 中的元素相同。

6. 总结

使用 std::copy 算法能够方便地完成容器间的数据复制操作,它的灵活性和效率使得在实际编程中被广泛应用。理解其参数和用法能够帮助程序员更高效地处理数据复制任务,同时提升代码的可读性和维护性。

这段代码演示了如何使用 C++ STL 中的 <algorithm> 头文件中的 copy 函数和 for_each 算法,以及自定义函数对象来实现向量之间的元素复制和打印输出。

1. 包含头文件

#include <algorithm>
#include <vector>
#include <iostream>

这些是 C++ 标准库的头文件,分别包含了 copy 算法、vector 容器和输入输出流。

2. 自定义函数对象 myPrint

class myPrint
{
public:void operator()(int val){std::cout << val << " ";}
};

myPrint 是一个函数对象类,重载了 operator(),用于输出传入的整数 val。在 for_each 算法中,会使用这个函数对象来打印容器中的元素。

3. test01 函数

void test01()
{std::vector<int> v1;for (int i = 0; i < 10; i++) {v1.push_back(i + 1);}std::vector<int> v2;v2.resize(v1.size());// 使用 std::copy 将 v1 中的元素复制到 v2 中std::copy(v1.begin(), v1.end(), v2.begin());// 使用 for_each 和自定义函数对象 myPrint 输出 v2 中的元素std::for_each(v2.begin(), v2.end(), myPrint());std::cout << std::endl;
}

详细解释:

  • 创建两个向量 v1 和 v2

    • v1 用于存储整数 1 到 10。
    • v2 先调整大小为 v1 的大小,以准备接收从 v1 复制的元素。
  • 使用 std::copy 复制元素

    • std::copy(v1.begin(), v1.end(), v2.begin()) 将 v1 中的元素复制到 v2 中。v1.begin() 和 v1.end() 分别是 v1 的起始和结束迭代器,v2.begin() 是 v2 的起始迭代器。
  • 使用 for_each 打印元素

    • std::for_each(v2.begin(), v2.end(), myPrint()) 对 v2 中的每个元素都调用 myPrint 函数对象的 operator(),从而将元素依次输出到标准输出流中。

4. main 函数

int main() {test01();system("pause");return 0;
}

main 函数调用 test01() 来执行示例代码,并在程序结束前调用 system("pause") 来暂停控制台,以便查看输出结果。

总结

这段代码展示了如何使用 std::copy 将一个向量 (v1) 的内容复制到另一个向量 (v2) 中,并使用 for_each 结合自定义函数对象来遍历 v2 并输出其内容。这种方式利用了 STL 提供的算法和函数对象的灵活性,使代码更加清晰和易于维护。

#include <algorithm>
#include <vector>
class myPrint
{
public:void operator()(int val){cout << val << " ";}
};
void test01()
{vector<int> v1;for (int i = 0; i < 10; i++) {v1.push_back(i + 1);}vector<int> v2;v2.resize(v1.size());copy(v1.begin(), v1.end(), v2.begin());for_each(v2.begin(), v2.end(), myPrint());cout << endl;
}
int main() {test01();system("pause");return 0;
}

02-拷贝和替换算法之replace用法

      在 C++ 的 STL(Standard Template Library)中,除了拷贝(如 std::copy)之外,还提供了替换算法,其中 std::replace 是其中之一。这篇文章将详细介绍 std::replace 算法的用法和示例。

1. std::replace 简介

std::replace 算法用于在容器中将指定值的所有元素替换为另一个值。它的原型定义在 <algorithm> 头文件中,可以轻松地对容器中的元素进行替换操作。

2. std::replace 函数签名

template< class ForwardIt, class T >
void replace( ForwardIt first, ForwardIt last, const T& old_value, const T& new_value );
  • firstlast:定义了要替换的元素范围,从 first(包含)到 last(不包含)。
  • old_value:要被替换的值。
  • new_value:替换成的新值。

3. 参数说明

  • ForwardIt:表示前向迭代器类型,通常是指向容器的迭代器。
  • T:表示元素的类型,通常是容器中存储的元素类型。

4. 使用示例

下面通过一个简单的示例来说明 std::replace 的具体用法。

#include <iostream>
#include <algorithm>
#include <vector>int main() {std::vector<int> v = {1, 2, 3, 4, 2, 5, 2};// 使用 std::replace 将 v 中的所有值为 2 的元素替换为 20std::replace(v.begin(), v.end(), 2, 20);// 输出替换后的向量内容for (int num : v) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

5. 示例解释

  • 首先,我们定义了一个 vector 容器 v,其中包含了整数 {1, 2, 3, 4, 2, 5, 2}
  • 然后,我们使用 std::replace 调用 std::replace(v.begin(), v.end(), 2, 20),将 v 中所有值为 2 的元素替换为 20。
  • 最后,通过简单的循环输出,我们验证了替换操作的结果,输出为 1 20 3 4 20 5 20

6. 总结

使用 std::replace 算法能够快速地替换容器中的特定值,提高了代码的可读性和简洁性。理解其参数和用法可以帮助程序员在实际编程中处理替换操作,尤其是在需要大量元素替换时尤为方便。

这段代码展示了如何使用 C++ STL 中的 replace 算法来替换容器中指定值的元素,并结合自定义函数对象 myPrint 打印容器中的元素。

1. 包含头文件

#include <algorithm>
#include <vector>
#include <iostream>

这些是 C++ 标准库的头文件,分别包含了 replace 算法、vector 容器和输入输出流。

2. 自定义函数对象 myPrint

class myPrint
{
public:void operator()(int val){std::cout << val << " ";}
};

myPrint 是一个函数对象类,重载了 operator(),用于输出传入的整数 val。在 for_each 算法中,会使用这个函数对象来打印容器中的元素。

3. test01 函数

void test01()
{std::vector<int> v;v.push_back(20);v.push_back(30);v.push_back(20);v.push_back(40);v.push_back(50);v.push_back(10);v.push_back(20);std::cout << "替换前:" << std::endl;std::for_each(v.begin(), v.end(), myPrint());std::cout << std::endl;// 将容器中的20 替换成 2000std::cout << "替换后:" << std::endl;std::replace(v.begin(), v.end(), 20, 2000);std::for_each(v.begin(), v.end(), myPrint());std::cout << std::endl;
}

详细解释:

  • 创建向量 v

    • v 用于存储整数元素 {20, 30, 20, 40, 50, 10, 20}
  • 打印原始容器元素

    • std::for_each(v.begin(), v.end(), myPrint()) 使用自定义函数对象 myPrint 打印容器中的元素,即输出 “20 30 20 40 50 10 20”。
  • 使用 std::replace 进行替换

    • std::replace(v.begin(), v.end(), 20, 2000) 将容器中所有值为 20 的元素替换为 2000。
  • 打印替换后的容器元素

    • 再次使用 std::for_each(v.begin(), v.end(), myPrint()) 打印容器中的元素,此时输出为 “2000 30 2000 40 50 10 2000”,验证了替换操作的结果。

4. main 函数

int main() {test01();system("pause");return 0;
}

main 函数调用 test01() 来执行示例代码,并在程序结束前调用 system("pause") 来暂停控制台,以便查看输出结果。

总结

这段代码演示了如何使用 std::replace 算法将容器中指定值的元素替换为另一个值,并通过自定义函数对象结合 for_each 算法打印容器中的元素。这种方式利用了 STL 提供的算法和函数对象的灵活性,使得替换操作变得简洁而直观。

#include <algorithm>
#include <vector>
class myPrint
{
public:void operator()(int val){cout << val << " ";}
};
void test01()
{vector<int> v;v.push_back(20);v.push_back(30);v.push_back(20);v.push_back(40);v.push_back(50);v.push_back(10);v.push_back(20);cout << "替换前:" << endl;for_each(v.begin(), v.end(), myPrint());cout << endl;//将容器中的20 替换成 2000cout << "替换后:" << endl;replace(v.begin(), v.end(), 20, 2000);for_each(v.begin(), v.end(), myPrint());cout << endl;
}
int main() {test01();system("pause");return 0;
}

03-拷贝和替换算法之replace_if用法

      在 C++ 的 STL(Standard Template Library)中,除了拷贝(如 std::copy)和替换(如 std::replace)之外,还提供了条件替换算法 std::replace_if。这篇文章将详细介绍 std::replace_if 算法的用法和示例。

1. std::replace_if 简介

std::replace_if 算法用于在容器中根据指定的条件替换元素。它的原型定义在 <algorithm> 头文件中,可以根据自定义的条件函数对容器中的元素进行替换操作。

2. std::replace_if 函数签名

template< class ForwardIt, class UnaryPredicate, class T >
void replace_if( ForwardIt first, ForwardIt last, UnaryPredicate p, const T& new_value );
  • firstlast:定义了要替换的元素范围,从 first(包含)到 last(不包含)。
  • p:用于判断要替换的元素的一元谓词(Unary Predicate)。
  • new_value:替换成的新值。

3. 参数说明

  • ForwardIt:表示前向迭代器类型,通常是指向容器的迭代器。
  • UnaryPredicate:表示一元谓词,接受一个参数并返回 bool 值的函数对象,用于判断要替换的元素是否符合条件。
  • T:表示元素的类型,通常是容器中存储的元素类型。

4. 使用示例

下面通过一个简单的示例来说明 std::replace_if 的具体用法。

#include <iostream>
#include <algorithm>
#include <vector>bool isEven(int num) {return num % 2 == 0;
}int main() {std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 使用 std::replace_if 将 v 中所有偶数替换为 0std::replace_if(v.begin(), v.end(), isEven, 0);// 输出替换后的向量内容for (int num : v) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

5. 示例解释

  • 首先,我们定义了一个 vector 容器 v,其中包含了整数 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
  • 然后,我们使用 std::replace_if 调用 std::replace_if(v.begin(), v.end(), isEven, 0),将 v 中所有偶数替换为 0,其中 isEven 是一个用于判断是否为偶数的一元谓词。
  • 最后,通过简单的循环输出,我们验证了替换操作的结果,输出为 1 0 3 0 5 0 7 0 9 0

6. 总结

使用 std::replace_if 算法能够根据自定义条件函数对容器中的元素进行替换,进一步提高了算法的灵活性和可扩展性。理解其参数和用法可以帮助程序员在实际编程中处理更加复杂的替换操作,例如基于特定条件替换元素。

这段代码演示了如何使用 std::replace_if 算法来替换容器中符合特定条件的元素。下面我们逐步解释每个部分的功能和作用。

包含头文件和定义类

首先是头文件的包含和两个类的定义:

#include <algorithm>
#include <vector>
#include <iostream>class myPrint
{
public:void operator()(int val){std::cout << val << " ";}
};class ReplaceGreater30
{
public:bool operator()(int val){return val >= 30;}
};
  • 头文件包含

    • 包含了必要的头文件 <algorithm><vector> 和 <iostream>
  • 自定义类 myPrint

    • 这是一个函数对象类,重载了 operator(),用于打印传入的整数 val
  • 自定义类 ReplaceGreater30

    • 这是一个谓词类(Predicate),重载了 operator(),根据传入的整数 val 判断是否大于等于 30,并返回相应的布尔值。

函数 test01()

接下来是 test01() 函数的实现:

void test01()
{std::vector<int> v;v.push_back(20);v.push_back(30);v.push_back(20);v.push_back(40);v.push_back(50);v.push_back(10);v.push_back(20);std::cout << "替换前:" << std::endl;std::for_each(v.begin(), v.end(), myPrint());std::cout << std::endl;// 将容器中大于等于的30 替换成 3000std::cout << "替换后:" << std::endl;std::replace_if(v.begin(), v.end(), ReplaceGreater30(), 3000);std::for_each(v.begin(), v.end(), myPrint());std::cout << std::endl;
}

详细解释:

  • 创建向量 v

    • v 用于存储整数元素 {20, 30, 20, 40, 50, 10, 20}
  • 打印原始容器元素

    • 使用 std::for_each(v.begin(), v.end(), myPrint()) 打印容器中的元素,输出 “20 30 20 40 50 10 20”。
  • 使用 std::replace_if 进行替换

    • std::replace_if(v.begin(), v.end(), ReplaceGreater30(), 3000) 将容器中所有满足 ReplaceGreater30() 条件(即大于等于 30)的元素替换为 3000。
  • 打印替换后的容器元素

    • 再次使用 std::for_each(v.begin(), v.end(), myPrint()) 打印容器中的元素,输出为 “20 3000 20 3000 3000 10 20”,验证了替换操作的结果。

main 函数

最后是 main() 函数,用于调用 test01() 函数并暂停程序执行:

int main() {test01();system("pause");return 0;
}

总结

这段代码展示了如何利用 std::replace_if 算法根据自定义的条件谓词类 ReplaceGreater30,将容器中符合条件的元素替换为指定的值。这种方式能够灵活地处理复杂的替换逻辑,通过结合函数对象和算法,提升了代码的可读性和可维护性。

#include <algorithm>
#include <vector>
class myPrint
{
public:void operator()(int val){cout << val << " ";}
};
class ReplaceGreater30
{
public:bool operator()(int val){return val >= 30;}
};
void test01()
{vector<int> v;v.push_back(20);v.push_back(30);v.push_back(20);v.push_back(40);v.push_back(50);v.push_back(10);v.push_back(20);cout << "替换前:" << endl;for_each(v.begin(), v.end(), myPrint());cout << endl;//将容器中大于等于的30 替换成 3000cout << "替换后:" << endl;replace_if(v.begin(), v.end(), ReplaceGreater30(), 3000);for_each(v.begin(), v.end(), myPrint());cout << endl;
}
int main() {test01();system("pause");return 0;
}

04-拷贝和替换算法之swap用法

     

在 C++ 的 STL(Standard Template Library)中,除了拷贝(如 std::copy)和替换(如 std::replace 和 std::replace_if)之外,还有一个重要的算法 std::swap,用于交换两个元素的值。下面将详细介绍 std::swap 算法的用法和示例。

1. std::swap 简介

std::swap 算法用于交换两个元素的值。它的原型定义在 <algorithm> 头文件中,可以用于交换容器中的元素值。

2. std::swap 函数签名

template< class T >
void swap( T& a, T& b );
  • ab:要交换值的两个对象。

3. 参数说明

  • T:表示元素的类型。

4. 使用示例

下面通过一个简单的示例来说明 std::swap 的具体用法。

#include <iostream>
#include <algorithm>
#include <vector>int main() {std::vector<int> v = {1, 2, 3, 4, 5};// 交换第一个和最后一个元素的值std::swap(v[0], v[v.size() - 1]);// 输出交换后的向量内容for (int num : v) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

5. 示例解释

  • 首先,我们定义了一个 vector 容器 v,其中包含了整数 {1, 2, 3, 4, 5}
  • 然后,我们使用 std::swap 将第一个元素和最后一个元素的值进行了交换,即将 v[0] 和 v[4] 的值交换。
  • 最后,通过简单的循环输出,我们验证了交换操作的结果,输出为 5 2 3 4 1

6. 总结

使用 std::swap 算法能够快速方便地交换两个元素的值,是 C++ 中常用的一个算法之一。它在容器操作中尤其有用,能够简化代码并提高效率。

这段代码演示了如何使用 std::swap 算法来交换两个容器的内容。下面逐步解释每个部分的功能和作用。

包含头文件和定义类

首先是头文件的包含和一个自定义的函数对象类:

#include <algorithm>
#include <vector>
#include <iostream>class myPrint
{
public:void operator()(int val){std::cout << val << " ";}
};
  • 头文件包含

    • 包含了必要的头文件 <algorithm><vector> 和 <iostream>
  • 自定义类 myPrint

    • 这是一个函数对象类,重载了 operator(),用于打印传入的整数 val

函数 test01()

接下来是 test01() 函数的实现:

void test01()
{std::vector<int> v1;std::vector<int> v2;for (int i = 0; i < 10; i++) {v1.push_back(i);v2.push_back(i + 100);}std::cout << "交换前: " << std::endl;std::for_each(v1.begin(), v1.end(), myPrint());std::cout << std::endl;std::for_each(v2.begin(), v2.end(), myPrint());std::cout << std::endl;std::cout << "交换后: " << std::endl;std::swap(v1, v2);std::for_each(v1.begin(), v1.end(), myPrint());std::cout << std::endl;std::for_each(v2.begin(), v2.end(), myPrint());std::cout << std::endl;
}

详细解释:

  • 创建两个向量 v1 和 v2

    • v1 包含了整数 {0, 1, 2, ..., 9}
    • v2 包含了整数 {100, 101, 102, ..., 109},即每个元素比 v1 中对应位置的元素大 100。
  • 打印交换前的两个容器元素

    • 分别使用 std::for_each 打印 v1 和 v2 的元素,验证初始化结果。
  • 使用 std::swap 进行容器交换

    • std::swap(v1, v2) 将 v1 和 v2 的内容进行交换。
  • 打印交换后的两个容器元素

    • 再次使用 std::for_each 打印交换后的 v1 和 v2 的元素,验证交换操作的正确性。

main 函数

最后是 main() 函数,用于调用 test01() 函数并暂停程序执行:

int main() {test01();system("pause");return 0;
}

总结

这段代码展示了如何使用 std::swap 算法来交换两个容器的内容。通过 std::swap(v1, v2),可以快速高效地交换两个容器,而不需要手动遍历和交换每个元素,提高了代码的简洁性和可读性。

#include <algorithm>
#include <vector>
class myPrint
{
public:void operator()(int val){cout << val << " ";}
};
void test01()
{vector<int> v1;vector<int> v2;for (int i = 0; i < 10; i++) {v1.push_back(i);v2.push_back(i + 100);}cout << "交换前: " << endl;for_each(v1.begin(), v1.end(), myPrint());cout << endl;for_each(v2.begin(), v2.end(), myPrint());cout << endl;cout << "交换后: " << endl;swap(v1, v2);for_each(v1.begin(), v1.end(), myPrint());cout << endl;for_each(v2.begin(), v2.end(), myPrint());cout << endl;
}
int main() {test01();system("pause");return 0;
}

总结

       STL(Standard Template Library)是C++标准库的一部分,提供了丰富的数据结构和算法,用于处理数据和实现常见的计算任务。STL中的算法分为几类,包括遍历算法、修改算法、排序算法、查找算法、数值算法等,每类算法都有其特定的应用场景和功能。

这篇关于【C++提高编程-10】----C++ STL常用拷贝和替换算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074931

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名