| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1315 人关注过本帖
标题:新手求助!我想写一个数组排序模板函数,但是里面加了一些条件,就是当这个 ...
只看楼主 加入收藏
JamesonCao
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2020-5-31
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
新手求助!我想写一个数组排序模板函数,但是里面加了一些条件,就是当这个调用这个函数的数组类型为字符串类型时,大小排序更改为字符串长度排序
代码如下,但是运行时当数组类型不为字符串类型时会报错,求指点!!!

#include <iostream>
#include <string>
using namespace std;


template<typename T, int n>
void Sort(T (&a)[n])
{
    int len = sizeof(a) / sizeof(*a);
    if(typeid(T) == typeid(string))
    {
        for(int i = 0; i < len - 1; i++)
        {
            for(int j = 0; j < len - i - 1; j++)
            {
                if(a[j].length() > a[j+1].length())
                {
                    T temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }

            }
        }
        cout << "one string" << endl;
    }
    else
    {
        for(int i = 0; i < len - 1; i++)
        {
            for(int j = 0; j < len - i - 1; j++)
            {
                if(a[j] > a[j+1])
                {
                    T temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }

            }
        }
    }
}
int main()
{
    char ch[5] = {'b', 'd', 'a', 'c', 'e'};
    int nums[8] = {4, 5, 3, 7, 8, 0, 2, 8};
    string str[4] = {"sdf", "df", "dsfsf", "d"};
    Sort(ch);
    Sort(nums);
    // Sort(str);
    for(int i = 0; i < 5; i++)
    {
        cout << ch[i] << " ";
    }
    cout << endl;
    for(int i = 0; i < 8; i++)
    {
        cout << nums[i] << " ";
    }
    // cout << endl;
    // for(int i = 0; i < 4; i++)
    // {
    //     cout << str[i] << " ";
    // }
    return 0;
}
搜索更多相关主题的帖子: for 类型 函数 排序 int 
2020-05-31 15:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:20 
当这个调用这个函数的数组类型为字符串类型时
应当是 当这个调用这个函数的数组的元素类型为字符串类型时
或 当这个调用这个函数的数组类型为字符串数组类型时
if(typeid(T) == typeid(string))
以上又都不对,std::string叫“字符串”的话,那 char[] 之类叫什么?

回正题,你有两个办法,古典的办法是模板特化
程序代码:
template<typename T, size_t N>
void Sort( T (&a)[N] )
{
    略
}

template<size_t N>
void Sort(std::string (&a)[N] )
{
    略
}

C++17 可以使用 if constexpr
程序代码:
template<typename T, size_t N>
void Sort( T (&a)[N] )
{
    if constexpr ( std::is_same_v<T,std::string> )
    {
       排序 std::string;
        return;
    }

    排序其它类型;
}


2020-05-31 16:49
JamesonCao
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2020-5-31
收藏
得分:0 
回复 2楼 rjsp
好的,受教了 \(^o^)/
2020-05-31 19:26
快速回复:新手求助!我想写一个数组排序模板函数,但是里面加了一些条件,就是当 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027699 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved