我叫马特。我是StackOverflow的新手,也是C ++的新手。目前正在通过Lippman的C ++ Primer进行工作。

我正在书中做练习,任务是将整数读入向量,然后通过先执行第一个和最后一个,执行第二个倒数第二个,执行第三个倒数第三等来将这些整数相乘。

我自己做的却没有查找任何内容,否则我几乎不了解我是否只是复制了……我的程序可以按预期方式编译和运行。我的问题是:我这样做正确吗?有更有效的方法吗?

我不仅想学习如何编写工作代码,而且还想正确地做它。先感谢您!

#include <iostream>
#include <string>
#include <vector>
#include <cctype>

using std::cout; using std::cin; using std::vector; using std::endl;
using std::string;


int main()
{
    vector<int> numbers;
    int usernum = 0;

    cout << "Enter some numbers: ";
    while (cin >> usernum)
    {
        numbers.push_back(usernum);
    }

    unsigned maxElement = numbers.size() - 1;
    unsigned minElement = 0;

    for (auto i : numbers)
    {
        cout << numbers[minElement] << " * " << numbers[maxElement] << " = " << numbers[minElement] * numbers[maxElement] << "\n";
        ++minElement;
        --maxElement;
    }

    return 0;
}

最佳答案

在评论中,您说:


  我注意到它实际上并没有完全按预期运行。它经过向量,然后将所有元素相乘两次,因为maxElement一直到开始,而minElement到结束。每次仅完成一次操作后,不确定如何停止它。


如果不想重复乘法,则需要稍微更改for循环。

for ( ; minElement <= maxElement; ++minElement, --maxElement)
{
    cout << numbers[minElement] << " * " << numbers[maxElement] << " = " << numbers[minElement] * numbers[maxElement] << "\n";
}


聚苯乙烯

使用此逻辑时,需要确保minElementmaxElement是带符号类型。否则,如果numbers仅具有一个元素,则会遇到问题。

关于c++ - 在C++中 vector 中的数字无序相乘,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39457483/

10-13 05:04