C语言中容器适配器与仿函数技术如何实现深入探究?

2026-04-12 06:201阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计781个文字,预计阅读时间需要4分钟。

C语言中容器适配器与仿函数技术如何实现深入探究?

目录

一、容器适配器

二、仿函数

一、容器适配器

容器适配器是一种设计模式,它允许将不同的容器(如数组、链表等)用于相同的功能,从而实现代码的复用和扩展。

二、仿函数仿函数(Functor)是一种设计模式,它可以将函数作为参数传递,使得函数可以在不同的容器上操作,而不需要修改函数本身。这样,我们可以用相同的方式处理不同的数据结构。

目录
  • 一、容器适配器
  • 二、仿函数

一、容器适配器

容器适配器其实是一种设计模式。转换出我们想要的东西。

比方说我们实现栈的时候既可以用数组,也可以用链表,此时我们就可以用到容器适配器了。

namespace yyh { template <class T, class container = vector<T>> class stack { public: void push(const T& x) { _con.push_back(x); } void pop() { _con.pop_back(); } const T& top() { return _con.back(); } bool empty() { return _con.empty(); } private: container _con; }; } int main() { yyh::stack<int, vector<int>> st1; yyh::stack<int, list<int>> st2; return 0; }

这样我们就可以用不同的底层实现栈了。

二、仿函数

仿函数其实就是用类重载()的方式来模拟一个函数。

我们现在写一个比较大小的仿函数

namespace yyh { template <class T> struct less { bool operator()(const T& x, const T& y) { return x < y; } }; template <class T> struct greater { bool operator()(const T& x, const T& y) { return x > y; } }; }

这个类我们就可以成为仿函数,而该类的对象成为函数对象。

用法:

当我们想同时派升序和降序的时候,我们可以利用仿函数来进行比较。

namespace yyh { template <class T> struct less { bool operator()(const T& x, const T& y) { return x < y; } }; template <class T> struct greater { bool operator()(const T& x, const T& y) { return x > y; } }; template <class T, class compare> void BubbleSort(vector<T>& a, compare com) { for (int i = 0; i < a.size() - 1; i++) { //用来判断是否交换过,提高效率 int flag = 1; for (int cur = 0; cur < a.size() - 1 - i; cur++) { if (com(a[cur + 1], a[cur])) { swap(a[cur], a[cur + 1]); flag = 0; } } if (flag) { break; } } } } int main() { yyh::less<int> lessFun; vector<int> v1; v1.push_back(1); v1.push_back(5); v1.push_back(2); v1.push_back(4); v1.push_back(3); yyh::BubbleSort(v1, lessFun); for (auto e : v1) { cout << e << " "; } return 0; }

C语言中容器适配器与仿函数技术如何实现深入探究?

到此这篇关于深入探究C++中的容器适配器与仿函数技术的文章就介绍到这了,更多相关C++容器适配器与仿函数内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

本文共计781个文字,预计阅读时间需要4分钟。

C语言中容器适配器与仿函数技术如何实现深入探究?

目录

一、容器适配器

二、仿函数

一、容器适配器

容器适配器是一种设计模式,它允许将不同的容器(如数组、链表等)用于相同的功能,从而实现代码的复用和扩展。

二、仿函数仿函数(Functor)是一种设计模式,它可以将函数作为参数传递,使得函数可以在不同的容器上操作,而不需要修改函数本身。这样,我们可以用相同的方式处理不同的数据结构。

目录
  • 一、容器适配器
  • 二、仿函数

一、容器适配器

容器适配器其实是一种设计模式。转换出我们想要的东西。

比方说我们实现栈的时候既可以用数组,也可以用链表,此时我们就可以用到容器适配器了。

namespace yyh { template <class T, class container = vector<T>> class stack { public: void push(const T& x) { _con.push_back(x); } void pop() { _con.pop_back(); } const T& top() { return _con.back(); } bool empty() { return _con.empty(); } private: container _con; }; } int main() { yyh::stack<int, vector<int>> st1; yyh::stack<int, list<int>> st2; return 0; }

这样我们就可以用不同的底层实现栈了。

二、仿函数

仿函数其实就是用类重载()的方式来模拟一个函数。

我们现在写一个比较大小的仿函数

namespace yyh { template <class T> struct less { bool operator()(const T& x, const T& y) { return x < y; } }; template <class T> struct greater { bool operator()(const T& x, const T& y) { return x > y; } }; }

这个类我们就可以成为仿函数,而该类的对象成为函数对象。

用法:

当我们想同时派升序和降序的时候,我们可以利用仿函数来进行比较。

namespace yyh { template <class T> struct less { bool operator()(const T& x, const T& y) { return x < y; } }; template <class T> struct greater { bool operator()(const T& x, const T& y) { return x > y; } }; template <class T, class compare> void BubbleSort(vector<T>& a, compare com) { for (int i = 0; i < a.size() - 1; i++) { //用来判断是否交换过,提高效率 int flag = 1; for (int cur = 0; cur < a.size() - 1 - i; cur++) { if (com(a[cur + 1], a[cur])) { swap(a[cur], a[cur + 1]); flag = 0; } } if (flag) { break; } } } } int main() { yyh::less<int> lessFun; vector<int> v1; v1.push_back(1); v1.push_back(5); v1.push_back(2); v1.push_back(4); v1.push_back(3); yyh::BubbleSort(v1, lessFun); for (auto e : v1) { cout << e << " "; } return 0; }

C语言中容器适配器与仿函数技术如何实现深入探究?

到此这篇关于深入探究C++中的容器适配器与仿函数技术的文章就介绍到这了,更多相关C++容器适配器与仿函数内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!