了解此功能C ++

时间:2020-03-05 09:18:04

标签: c++

我下面有这个c ++函数 该函数使用第一个和最后一个索引,并检查以下数字是否大于或小于下一个索引。如果是,则将x或y变量替换为当前索引的值。

这是函数:

template<class Type>
void funcExp(Type list[], int size) {
    Type x = list[0];
    cout << x << endl;
    Type y = list[size - 1];
    cout << y << endl;
    for(int j = 1; j < size; j++) {
        if(x < list[j]) x = list[j];

        if(y > list[size - 1 - j]) y = list[size - 1 - j];
    }
    cout << x << endl;
    cout << y << endl;
}

我主要有这个:

int list[10] = {5,3,2,10,4,19,45,13,61,11};
funcExp(List, 10);

我了解该代码如何处理数字,但是我不确定该代码如何与字符串一起工作。 例如:

string strList[] = {"One", "Hello", "Four", "Three", "How", "Six"}; 
funcExp(strList, 6);

返回以下输出:

x = three 
y = four

我认为它正在计算每个字符,但输出却不同。 我的问题是,此函数如何处理字符串数组。

2 个答案:

答案 0 :(得分:2)

此函数通过始终保持比较中“获胜”的值来查找数组中的最大(x)和最小(y)元素。

使用默认规则进行比较(除非您重载了运算符),即,对整数进行普通数字比较,对字符串进行字母顺序排序。


请注意,没有理由执行从左到右和从右到左的另一种搜索。下面的代码将更有效:

template<class Type>
void funcExp(Type list[], int size) {
    Type x = list[0];
    cout << x << endl;
    Type y = list[0];
    cout << y << endl;
    for(int j = 1; j < size; j++) {
        if(x < list[j]) x = list[j];

        else if(y > list[j]) y = list[j];
    }
    cout << x << endl;
    cout << y << endl;
}

答案 1 :(得分:1)

通过依次比较字母直到发现差异来比较字符串。

“四个”以“ F”开头,小于您的单词的其他任何首字母

“三个”以“ T”开头,比您单词中的其他任何首字母大

这与std::lexicographical_compare

相同。