各位好友, 欢迎来到 模板(T)进阶___章节 !—–>模板(T)~~ 泛型编程
——>Vector ~~ List —>测试 :>
//测试环节
//
#include
#include
#include
using std :: cout;
using std :: endl;
using std :: vector;
using std :: list;
//第一种写法
template
void Print(const Container& v)
{
typename Container :: const_iterator it = v.begin();
while(it != v.end())
{
cout 推荐
template
void Print(const Container& v)
{
auto it = v.begin();
while(it != end())
{
cout v;
v.push_back(12);
v.push_back(16);
v.push_back(17);
v.push_back(21);
v.push_back(23);
for(auto e : v)
{
cout It;
It.push_back(32);
It.push_back(36);
It.push_back(38);
It.push_back(38);
It.push_back(40);
for(auto e : It)
{
cout
为了方便好友们, 有更好的观感体验, 现附上 彩色 代码图样 :>
——–>传统遍历打印 :>
——–>优化升级打印:>
——–>错误示范 :>
————->正确样例 :&g服务器托管网t;
——->NO. 1
——->NO. 2
——–>小结 :>
(1). 加上 “typename” 之后, 明确指明 “Container :: const_iterator” 是类型, 合乎语法 !
不加 typename —>需要将 Container 进行实例化 !毕竟 编译器在进行识别 “const_iterator”时候
————>不知道其是 自定义类型 还是内嵌类(即对象), 还有可能是静态成员变量 !
(2). 注意 :>所有容器均 适配正向迭代器(有无 const 均可), 但不一定都会适配反向迭代器
—–>其中,Vector不支持 ostream (流插入), 毕竟没有重载, 但可以用 迭代器遍历✔
一. 非类型模板参数
————->用一个常量作为类(函数)模板的参数, 在类(函数)模板中可将该参数当作常量使用 。
————->代码区域 : >
//定义静态栈区
#define N 10
template
class stack
{
public:
void func()
{
N = 0;
}
private:
T _a[N];
int _top;
};
int main()
{
stack T1;
stack T2; //容量为 100
return 0;
}
———>彩色 代码图示 :>
——–>错误示范 :>
—–>注意 :>
(1). 非类型模板参数必须在编译期就能确定结果 。
(2). 浮点数, 类对象 以及字符串是不允许作为非类型模板参数 ;
二 . 模板 特化
—–>模板特化 分为 函数模板特化 与类模板特化
(1). 函数模板特化
a. 必须先有一个基础的函数模板 ;
b. 关键字 template 后面添加上 一对 空的尖括号 ;
c. 函数名后面紧跟上 一对尖括号, 尖括号内 指定需要特化处理的类型 ;
d. 函数形参 :必须要同函数模板的基础参数类型完全相同 。
——>特化 代码实现 :>
//函数 模板 特化
//
template
bool Less(T left, T right)
{
return left
bool Less(int* left, int* right)
{
return *left
bool Less(T* left, T* right)
{
return *left
为了方便好友们, 有更好的观感体验, 现附上 彩色 代码图样 :>
———>测试 ~~ 运行结果 :>
(2). 类模板特化
a. 全特化—>将 模板参数列表中的所有的参数进行确定化 ;
//类模板 特化
template
class Date
{
public:
Date() {cout "
class Date
{
public:
Date() {cout "
b.偏特化—>任何针对模板参数进一步进行条件限制设计的特化版本 。
———>两种表现方式 :
部分特化 :将模板参数列表中的一部分进行参数特化 : >
//部分特化
template
class Date
{
public:
Date() {cout "
———->参数进一步 限制 :>
//限制性 特化
template
class Date
{
public:
Date() {cout "
class Date
{
public:
Date() {cout "
———->类模板特化 测试环节 :>
//测试__类模板特化
//
int main()
{
Date d1;
Date d2;
Date d3;
Date d4;
Date d5;
Date d6;
Date d7;
return 0;
}
为了方便好友们, 有更好的观感体验, 现附上 彩色 代码图样 :>
——–>NO1.
——–>NO2.
——–>NO3.
——–>NO_A.
c. 类模板—>应用实例 :>
——>部分代码 :>
// "Priorioty.h" ---->部分代码
#include
#include
#include
using std :: cout;
using std :: endl;
using std :: vector;
using std :: list;
using std :: Container;
template
class Less
{
public:
bool operator()(const T& left, const T& right)
{
return left
class Less
{
bool operator()(const Date* left, const Date* right)
{
return *left 模板
priority_queue, Less> pq1;
pq1.push(Date(2023, 6, 7));
pq1.push(Date(2023, 6, 8));
pq1.push(Date(2023, 6, 13));
while(!pq1.empty())
{
cout 模板
priority_queue, Less> pq2;
pq2.push(new Date(2023, 11, 10));
pq2.push(new Date(2023, 11, 11));
pq2.push(new Date(2023, 11, 12));
while(!pq2.empty())
{
cout
各位好友, 由于篇幅限制,避免重复赘余 ——>上述,仅仅展示了 部分代码 !
其他, 没有补充的代码, 是由上几期, 在 优先队列 “Priority_queue”当中 , 已经实现过的 !
————————->请好友移步上几期博文, 自行查看 !✔✔
为了方便好友们, 有更好的观感体验, 现附上 彩色 代码图样 :>
三 . 模板总结
——>优点 :>
(1). 模板增强了代码的灵活性 。
(2). 模板复用了代码, 节省了资源, 更快的迭代开发,C++ 标椎模板库(STL)因此而产生 ;
——>缺点 : >
(1). 模板导致了代码膨胀问题, 也会导致编译时间变长 ;
(2). 出现模板错误, 错误信息非常凌乱, 极其不容易定位错误 ;这个时候, 可以考虑 排除法 。
各位好友, 本期内容 已完结 !
下一期, 开战 新的领域 ——>继承 ! “敬请期待 !
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
我使用到的是python库中scipy。 ”’ 线性规划 ”’ #目标函数的系数 # min z = 2×1+3×2-5×3 c = np.array([-2,-3,5]) #不等式限制条件的系数,转化为小于等于 # 2×1-5×2+x3 如果是整型规划,…