在我的作業中,我的任務是為這些創建 FooCl 類:
double d[] = {1.3, 0.7, 2.4, 1.5, 6.2, 5.7, 8.6, 9.1};
FooCl<double> itemsD(d, sizeof(d) / sizeof(d[0]));
std::string s[] = {"C ", "Haskell", "Python", "Java"};
FooCl<std::string> itemsS(s, sizeof(s) / sizeof(s[0]));
itemsD.mySort();
itemsS.mySort();
我為它創建了一個建構式/解構式,但我不知道如何使用模板為兩種不同型別的串列創建兩個不同的函式。我想我需要使用某種多載,但不知道如何。
template <typename T>
class FooCl
{
private:
T *mItems;
int mItemsSize;
public:
FooCl(T items[], int itemsSize)
{
mItems = new T[itemsSize];
for (int i=0; i<itemsSize; i)
{
this->mItems[i] = items[i];
}
this->mItemsSize = itemsSize;
};
~FooCl()
{
delete[] mItems;
}
void mySort()
{
//I have no idea how to write this function, so it can sort two different types of lists.
}
};
uj5u.com熱心網友回復:
一種方法是使用std::sort如下所示:
void mySort()
{
//--vvvvvvvvv------------------------------------>use std::sort
std::sort(mItems, mItems mItemsSize);
}
您甚至可以撰寫您的排序功能/實作,其中包括使用mItems和mItemsSize。
uj5u.com熱心網友回復:
對排序很重要的兩個操作是比較和交換。
兩者都double已經std::string有了 的定義<,這是慣用的比較運算子。
已經有一個模板std::swap,這是慣用的交換功能。
您需要撰寫一個使用mItemsand的排序mItemsSize,比較專案(with <)并交換那些在錯誤位置的專案(with std::swap)。
uj5u.com熱心網友回復:
如果您想對任何容器進行排序,例如std::array或std::vector
template <typename Container, typename Func>
void sort(Container& c, Func functor)
{
std::sort(std::begin(c), std::end(c), functor);
}
用法
std::vector<int> vct {1,2,3,1,2};
sort(vct, [](const int lhs, const int rhs) {return lhs > rhs;});
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478091.html
