SelectionSort 模板函数不适用于数组
SelectionSort Template function not working with arrays
我有一个模板函数,可以对可索引对象执行基于索引的选择排序。 IndexedContainer 必须支持 operator[]
和 size()
,例如std::vector
。容器元素必须支持 operator<
和 operator=
.
我的函数必须接受任何 std::vector 或数组并按升序排序。
函数有效,但仅适用于向量,因为我使用的是 size() 函数。我无法在我的函数中支持 operator[],因为 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,方便的是 link 包含一个实现。关键是这个专业:
template <class T, std::size_t N>
constexpr std::size_t size(const T (&array)[N]) noexcept
{
return N;
}
复制它,并在您的实现中使用 size
免费功能。
我有一个模板函数,可以对可索引对象执行基于索引的选择排序。 IndexedContainer 必须支持 operator[]
和 size()
,例如std::vector
。容器元素必须支持 operator<
和 operator=
.
我的函数必须接受任何 std::vector 或数组并按升序排序。
函数有效,但仅适用于向量,因为我使用的是 size() 函数。我无法在我的函数中支持 operator[],因为 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,方便的是 link 包含一个实现。关键是这个专业:
template <class T, std::size_t N>
constexpr std::size_t size(const T (&array)[N]) noexcept
{
return N;
}
复制它,并在您的实现中使用 size
免费功能。