有关模板类的回顾

Some Points:

  • The declaration and definition of template class must be in the same file, or build error.  e.g. see detail
Error LNK2019 unresolved external symbol "public: __cdecl QuickSort<int>::QuickSort<int>(int *,bool)" (??0?$QuickSort@H@@QEAA@PEAH_N@Z) referenced in function main	HelloWorld	D:\SourceCode\VisualStudio\HelloWorld\HelloWorld\HelloWorld.obj	1	
  • Review the quick sort algorithm. Time Complexity: average: O(nlogn),  worst: O(n^2).
  • We can get the length of the array by using the function "(int) _msize(pointer)", pointer point to the array. Only the array which created dynamically could use this function.

Source Code:

  • main.cpp


#include "pch.h"
#include "pch.cpp"
int main()
{
	int *int_a = new int[10];
	int *int_b = new int[10];
	for (int i = 0; i < 10; i++) {
		std::cin >> int_a[i];
		int_b[i] = int_a[i];
	}
	// only the array which created dynamically could use the function '_msize()'.
	QuickSort<int> tmp(int_a), tep(int_b, true);
	tmp.sort();
	tep.sort();
	tmp.show();
	tep.show();

	double *double_a = new double[10];
	double *double_b = new double[10];
	for (int i = 0; i < 10; i++) {
		std::cin >> double_a[i];
		double_b[i] = double_a[i];
	}
	// only the array which created dynamically could use the function '_msize()'.
	QuickSort<double> tmp_2(chr_a), tep_2(chr_b, true);
	tmp_2.sort();
	tep_2.sort();
	tmp_2.show();
	tep_2.show();
	return 0;
}


  •  pch.h


#ifndef PCH_H
#define PCH_H

#include <iostream>

template <class T>
class QuickSort {
public:
	QuickSort(T *arr, bool reverse = false);
	~QuickSort();
	void sort();
	void show();
protected:
	void onSort(int p, int q);
	int getPartition(int p, int q);
private:
	int num;
	T *arr;
	bool reverse;
};

  • pch.cpp


#include "pch.h"

template <class T>
QuickSort<T>::QuickSort (T *arr, bool reverse) {
	this->arr = arr;
	this->num = (int)_msize(arr) / sizeof(T);
	this->reverse = reverse;
}

template <class T>
QuickSort<T>::~QuickSort() {
	if (arr != nullptr)
		free(arr);

}
template<class T>
void QuickSort<T>::sort() {
	onSort(0, num - 1);
}

template <class T>
void QuickSort<T>::onSort(int p, int q) {
	if (p < q) {
		int mid = getPartition(p, q);
		onSort(p, mid - 1);
		onSort(mid + 1, q);
	}
}
template <class T>
int QuickSort<T>::getPartition(int p, int q) {
	T stand = arr[p];
	int i = p, j = q + 1;
	while (true) {
		while (arr[++i] <= stand && i < q);
		while (arr[--j] >= stand && j > p);
		if (i >= j) break;
		T temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}
	arr[p] = arr[j];
	arr[j] = stand;
	return j;
}

template <class T>
void QuickSort<T>::show() {
	if (this->reverse) {
		for (int i = num - 1; i >= 0; i--)
			std::cout << arr[i] << ' ';
		std::cout << std::endl;
		return;
	}
	for (int i = 0; i < num; i++)
		std::cout << arr[i] << ' ';
	std::cout << std::endl;
}

 

内容概要:本文档为《400_IB Specification Vol 2-Release-2.0-Final-2025-07-31.pdf》,主要描述了InfiniBand架构2.0版本的物理层规范。文档详细规定了链路初始化、配置与训练流程,包括但不限于传输序列(TS1、TS2、TS3)、链路去偏斜、波特率、前向纠错(FEC)支持、链路速度协商及扩展速度选项等。此外,还介绍了链路状态机的不同状态(如禁用、轮询、配置等),以及各状态下应遵循的规则和命令。针对不同数据速率(从SDR到XDR)的链路格式化规则也有详细说明,确保数据包格式和控制符号在多条物理通道上的一致性和正确性。文档还涵盖了链路性能监控和错误检测机制。 适用人群:适用于从事网络硬件设计、开发及维护的技术人员,尤其是那些需要深入了解InfiniBand物理层细节的专业人士。 使用场景及目标:① 设计和实现支持多种数据速率和编码方式的InfiniBand设备;② 开发链路初始化和训练算法,确保链路两端设备能够正确配置并优化通信质量;③ 实现链路性能监控和错误检测,提高系统的可靠性和稳定性。 其他说明:本文档属于InfiniBand贸易协会所有,为专有信息,仅供内部参考和技术交流使用。文档内容详尽,对于理解和实施InfiniBand接口具有重要指导意义。读者应结合相关背景资料进行学习,以确保正确理解和应用规范中的各项技术要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值