我的 C 作業的一部分是為此主要制作 FooClass:
int main()
{
const int max = 10;
int x[] = {10, 20, 7, 9, 21, 11, 54, 91, 0, 1};
FooClass<int> xl(x, max);
int x2[] = {10, 20, 7, 9, 21, 11, 54, 91, 0, 1};
FooClass<int, std::greater<int> > xg( x2, max);
xl.sort();
xg.sort();
xl.print();
xg.print();
}
目標是使第一次排序升序和第二次降序:
0 1 7 9 10 11 20 21 54 91
91 54 21 20 11 10 9 7 1 0
到目前為止,這是我的代碼:
template <typename T, typename F=std::greater<T>>
class FooClass
{
private:
T *mItems;
int mItemsSize;
bool mpermission;
public:
FooClass(T items[], int itemsSize)
{
this->mItemsSize = itemsSize;
this->mItems = items;
};
void print() const
{
for (int i = 0; i < mItemsSize; i)
{
std::cout << mItems[i] << " ";
}
std::cout << std::endl;
}
void sort()
{
std::sort(mItems, mItems mItemsSize);
}
};
我的代碼目前列印出來:
0 1 7 9 10 11 20 21 54 91
0 1 7 9 10 11 20 21 54 91
而且我正在努力使我的排序功能根據輸入模板引數表現不同。有什么辦法可以使這項作業?
uj5u.com熱心網友回復:
首先,您沒有使用F. 您需要傳遞 to 的F實體std::sort:
void sort()
{
std::sort(mItems, mItems mItemsSize, F{});
}
其次:您的默認設定F將使您的示例中的兩個實體以相同的方式對陣列進行排序。要獲得預期的結果,您應該改為F使用默認值std::less<T>。
template <typename T, typename F=std::less<T>>
class FooClass
{
//...
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/482236.html
