如何在我编写的C ++程序中合并引用变量?

时间:2018-09-27 01:35:59

标签: c++

我为计算机科学课编写了一个C ++程序,但是我显然错过了一件事。这是我忽略的陈述:“您的程序必须至少包含一个使用一个或多个参考变量作为参数的函数”。如何在我的程序中合并引用变量并仍然获得相同的结果(因为我的程序确实获得了正确的预期输出)?我将不胜感激。预先感谢!

#include <iostream>
#include <fstream>

using namespace std;

struct Letter_Stats
{
    int count;
    char ch;
};

void display(Letter_Stats, Letter_Stats);

int main()
{
    ifstream inFile;
    char ch;
    int i;
    Letter_Stats letters[26];
    Letter_Stats small, large;

    inFile.open("letter_count.txt", ios::in);

    if (inFile.fail())
    {
        cout << "Error opening file.";
        return 1;
    }

    for (i = 0; i<26; i++)
    {
        letters[i].count = 0;
        letters[i].ch = ('A' + i);
    }

    while (!inFile.eof())
    {
        inFile.get(ch);

        if ('A' <= toupper(ch) && toupper(ch) <= 'Z')
            letters[toupper(ch) - 'A'].count++;
    }

    inFile.close();
    small = letters[0];
    large = letters[0];

    for (i = 1; i<26; i++)
    {
        if (letters[i].count > large.count)
        {
            large = letters[i];
        }

        if (letters[i].count < small.count)
        {
            small = letters[i];
        }
    }

    display(large, small);
    return 0;
}

void display(Letter_Stats most, Letter_Stats least)
{
    cout << "The most common letter is " << most.ch << " with " << most.count << " occurrences." << endl;
    cout << "The least common letter is " << least.ch << " with " << least.count << " occurrences." << endl;
}

1 个答案:

答案 0 :(得分:1)

只是改变:

void display(Letter_Stats, Letter_Stats);

收件人:

void display(Letter_Stats&, Letter_Stats&);

和:

void display(Letter_Stats most, Letter_Stats least)

收件人:

void display(Letter_Stats &most, Letter_Stats &least)

引用意味着您不将值作为副本发送给函数,而是将变量的地址发送给函数。 从中获得的优势(在大多数情况下):

  1. 通常,您的函数将不那么繁重,因为您只发送8个字节的内存地址,而不是整个变量(请注意,在您的情况下,您的变量仅占用5个字节-int + char,但是只要您愿意在您的结构中添加另一个数组,甚至是一个int,引用会更小。
  2. 在您的情况下,它实际上不是计量表,但是您可以更改发送到函数值中的变量,而无需返回它们(这样一来,函数对函数外部多个变量的影响)。

编辑:

由于不需要更改这些变量的值,因此可以使用跟随函数的签名,并将变量作为const引用发送,如注释中@ M.M所述:

void display(const Letter_Stats&, const Letter_Stats&);
void display(const Letter_Stats &most, const Letter_Stats &least)