SelectionSort Template函数不适用于数组



我有一个模板函数,它对可索引对象执行基于索引的选择排序。IndexedContainer必须支持operator[]size(),例如std::vector。容器元素必须支持operator<operator=

我的函数必须接受任何std::向量或数组,并按升序对其进行排序。

函数有效,但仅适用于矢量,因为我使用的是size((函数。由于size((函数不适用于数组,因此在支持函数中的运算符[]时遇到了问题。

#include <iostream>
#include <vector>
template <typename IndexedContainer>
void SelectionSort(IndexedContainer &values) {
// TODO
int temp;
for(unsigned int i = 0; i < values.size(); i++){
for(unsigned int j = i; j > 0; j--){
if(values[j] < values[j-1]){
temp = values[j];
values[j] = values[j-1];
values[j-1] = temp;
}
}
}
}
int main() {
std::vector<char> data = {'a','4','b','2','c','1'};
std::vector<int> data3 = {1,5,6,8,10,2};
//std::vector<std::string> data4 = {"1d23","3v4f","0878"};
char data2[] = "a3b4c1d2";
SelectionSort(data);
SelectionSort(data2);
SelectionSort(data3);
for(auto i: data){
std::cout<<i<<" ";
}
std::cout<<'n';
std::cout<<data2<<'n';
for(auto j: data3){
std::cout<<j<<" ";
}
return 0;
}

c++17引入了std::size,这是一个免费函数,它用size成员函数和数组封装事物的大小。如果您没有c++17,那么该链接很方便地包含一个实现。关键在于这种专业化:

template <class T, std::size_t N>
constexpr std::size_t size(const T (&array)[N]) noexcept
{
return N;
}

复制它,并在实现中使用size自由函数。

相关内容

  • 没有找到相关文章

最新更新