我叫马特。我是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";
}
聚苯乙烯
使用此逻辑时,需要确保
minElement
和maxElement
是带符号类型。否则,如果numbers
仅具有一个元素,则会遇到问题。关于c++ - 在C++中 vector 中的数字无序相乘,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39457483/