【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中的算法分为几类,包括遍历算法、修改算法、排序算法、查找算法、数值算法等,每类算法都有其特定的应用场景和功能。

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

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

相关文章

电路分析期末总结笔记下

对称三相电路的线电流和相电流&#xff0c;线电压和相电压关系 相电压与线电压的关系 线电压定义&#xff1a;任意两相之间的电压称为线电压&#xff0c;常用符号V_L表示。 相电压定义&#xff1a;一相绕组两端的电压称为相电压&#xff0c;常用符号V_P表示。 关系&#xff1…

linux挂载硬盘(解决linux不显示硬盘问题)

目录 1.查看系统有几块硬盘2.查看挂载情况3.格式化硬盘4.创建挂载目录用于挂载硬盘5.将硬盘挂载到指定的挂载目录6.随系统自启动挂载查看配置文件&#xff0c;看是否已经把这条命令加入配置 帮同门解决挂载失败问题记录 参考视频&#xff1a;只要6步&#xff01;Linux系统下挂载…

网络爬虫Xpath开发工具的使用

开发人员在编写网络爬虫程序时若遇到解析网页数据的问题&#xff0c;则需要花费大量的时间编 写与测试路径表达式&#xff0c;以确认是否可以解析出所需要的数据。为帮助开发人员在网页上直接 测试路径表达式是否正确&#xff0c;我们在这里推荐一款比较好用的 XPath 开发工…

【Text2SQL 论文】MAGIC:为 Text2SQL 任务自动生成 self-correction guideline

论文&#xff1a;MAGIC: Generating Self-Correction Guideline for In-Context Text-to-SQL ⭐⭐⭐ 莱顿大学 & Microsoft, arXiv:2406.12692 一、论文速读 DIN-SQL 模型中使用了一个 self-correction 模块&#xff0c;他把 LLM 直接生成的 SQL 带上一些 guidelines 的 p…

【跟我学RISC-V】(三)openEuler特别篇

写在前面 这篇文章是跟我学RISC-V指令集的第三期&#xff0c;距离我上一次发文已经过去一个多月了&#xff0c;在这个月里我加入了oerv的实习项目组&#xff0c;并且还要准备期末考试&#xff0c;比较忙&#xff0c;所以更新频率不高&#xff0c;不过对于Linux kernel和RISC-V…

Opencv学习项目6——pyzbar

在之前我们学习了解码图片中的二维码&#xff0c;这次我们开启摄像头来解码视频中二维码 开启摄像头 # 打开摄像头 cap cv2.VideoCapture(0) cap.set(3, 640) # 设置摄像头画面宽度 cap.set(4, 480) # 设置摄像头画面高度 我使用的是笔记本上的摄像头来进行的&#xff0c;…

腰背肌筋膜炎的症状及治疗

腰背肌筋膜炎的症状 一、疼痛特点&#xff1a; 主要表现为腰背部弥漫性钝痛&#xff0c;尤以两侧腰肌及髂嵴上方更为明显。疼痛特点为晨起痛&#xff0c;日间轻&#xff0c;傍晚复重。长时间不活动或活动过度均可诱发疼痛&#xff0c;病程长&#xff0c;且因劳累及气候变化而发…

如何运用Midjourney探究新中式美学?

新中式美学最近真是越来越火了&#xff0c;把传统中式元素和现代设计结合起来&#xff0c;不仅看着舒服&#xff0c;还特别有文化韵味。 1. 研究和准备 首先&#xff0c;得先弄清楚什么是新中式美学。说白了&#xff0c;就是把传统中式元素和现代设计结合起来。你可以看看相关…

#03动态规划

要点&#xff1a; 动态规划方法与贪心法、分治法的异同&#xff1b; 动态规划方法的基本要素与求解步骤&#xff1b; 动态规划方法的应用。 难点&#xff1a; 如何根据问题的最优子结构性质构造构造动态规划方法中的递归公式或动态规划方程。 动态规划的基本思想 动态规…

算法与数据结构面试宝典——迭代与递归详解与示例(C#,C++)

文章目录 一、迭代与递归简介迭代递归 二、迭代与递归的应用场景迭代递归 三、迭代与递归的优缺点迭代优缺点递归优缺点 四、迭代与递归的示例及面试策略示例1&#xff1a;斐波那契数列&#xff08;迭代实现&#xff09;示例2&#xff1a;快速排序&#xff08;递归实现&#xf…

大学网页制作作品1

作品须知&#xff1a;1.该网页作品预计分为5个页面&#xff08;其中1个登录页面&#xff0c;1个首页主页面&#xff0c;3个分页面&#xff09;&#xff0c;如需要可自行删改增加页面。&#xff08;总共约800行html,1200行css,100行js&#xff09; 2.此网页源代码只用于学习和模…

R语言——数据与运算

练习基本运算&#xff1a; v <- c(2,4,6,9)t <- c(1,4,7,9)print(v>t)print(v < t)print(v t)print(v!t)print(v>t)print(v<t) v <- c(3,1,TRUE,23i)t <- c(4,1,FALSE,23i)print(v&t)print(v|t)print(!v)v <- c(3,0,TRUE,22i)t <- c(1,3,T…

【启明智显产品分享】Model4 工业级HMI芯片详解(三):高安全、防抄板

Model4 工业级HMI芯片详解系列专题&#xff08;三&#xff09;【高安全、防抄板】 随着物联网和智能设备的快速发展&#xff0c;设备安全认证的需求日益迫切。硬件安全认证和保护在确保设备和身份安全中发挥着不可替代的作用&#xff0c;需要与软件安全相结合&#xff0c;共同构…

[Python人工智能] 四十六.PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解合如何利用keras和tensorflow构建基于注意力机制的CNN-BiLSTM-ATT-CRF模型,并实现中文实体识别研究。这篇文章将介绍PyTorch入门知识。前面我们的Python人工智能主要以TensorFlow和Keras为主,…

STM32--IAP程序升级实验

1. STM32程序升级方法 1.1 ST-link / J-link下载 将编译生成的hex文件使用ST-Link/J-Link工具直接下载进 Flash 即可。Keil中点击下载也能一键下载。下载后的代码会存放在Flash的起始地址0x0800 0000处。 简单补充一句&#xff0c;bin文件和hex文件的区别&#xff1a; bin文…

ARM day1练习 求1~100内的和

题目要求:用ARM汇编语言实现1~100之间之和&#xff08;5050 0x13BA&#xff09; .text 声明以下内容是文本段的内容 .global _start .global声明_start标签是一个全局标签_start:mov r1,#0x0 r1 summov r2,#0x1 r2 ifun: 加法函数cmp r2,#100 r2中的值和100作比较add…

Matlab基础篇:数据输入输出

前言 数据输入和输出是 Matlab 数据分析和处理的核心部分。良好的数据输入输出能够提高工作效率&#xff0c;并确保数据处理的准确性。本文将详细介绍 Matlab 数据输入输出的各种方法&#xff0c;包括导入和导出数据、数据处理和数据可视化。 一、导入数据 Matlab 提供了多种方…

Go自定义数据的序列化流程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【计算机毕业设计】167校园失物招领微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

导出 S 参数扫描结果供 INTERCONNECT 使用

导出 S 参数扫描结果供 INTERCONNECT 使用 正文正文 有时候,对于 FDTD 无法直接进行仿真的大型仿真链路,我们需要使用 FDTD 针对单个小的模块进行仿真,再将得到的 S 参数结果导入到 INTERCONNECT 中使用,最终完成整个链路的仿真。通常完成 S 参数扫描后其状态如下图所示:…