C++中的容器适配器和仿函数是实现数据结构与算法的重要技术,容器适配器可以将一个容器转换为另一个形式,仿函数则可以自定义数据类型的比较、排序、计算等行为,提高程序的灵活性和可重用性
一、容器适配器
容器适配器其实是一种设计模式。转换出我们想要的东西。
比方说我们实现栈的时候既可以用数组,也可以用链表,此时我们就可以用到容器适配器了。
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++中的容器适配器与仿函数技术


基础教程推荐
猜你喜欢
- C++中的atoi 函数简介 2023-01-05
- C++详细实现完整图书管理功能 2023-04-04
- 详解c# Emit技术 2023-03-25
- C利用语言实现数据结构之队列 2022-11-22
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- C语言基础全局变量与局部变量教程详解 2022-12-31
- C语言 structural body结构体详解用法 2022-12-06
- C/C++编程中const的使用详解 2023-03-26
- 一文带你了解C++中的字符替换方法 2023-07-20
- 如何C++使用模板特化功能 2023-03-05