该代码将获得除其自身以外的所有其他元素的乘积。
它使前缀乘积和后缀乘积都得到结果。
我的输出与Xcode中的相同代码不同。
运行它时,最后一个元素是0、24或其他一些大数字,即使它们来自同一代码。
我不知道为什么,所以我只是尝试改变随机的东西。
我尝试使用distance()而不是-vec.begin()。
我尝试过,否则。
我尝试了是否== vec.end()。
#include <iostream>
#include <vector>
using namespace std;
vector<int>::iterator num;
vector<int> nums={1,2,3,4,5};
vector<int> prefix_products(nums.begin(),nums.end()); // deducted
vector<int> suffix_products(nums.begin(),nums.end()); // deducted
int main() {
int j;// for printing
// prefix products
for (num=prefix_products.begin(); num!=prefix_products.end(); ++num)
{
if (num==prefix_products.begin())
*num=*num;
else
*num=*num * prefix_products[distance(prefix_products.begin(),num)-1];
}
// vector (pp) printer
for (j=0; j<prefix_products.size(); ++j)
{
std::cout<<prefix_products[j]<<" ";
}
cout<<endl;
// suffix product
reverse(suffix_products.begin(),suffix_products.end());
for (num=suffix_products.begin(); num!=suffix_products.end(); ++num )
{
if (num==suffix_products.begin())
{
*num=*num;
}
else
{
*num=*num * suffix_products[distance(suffix_products.begin(),num)-1];
}
}
reverse(suffix_products.begin(),suffix_products.end());
// (sp) printer
for (j=0; j<suffix_products.size(); ++j)
{
cout<<suffix_products[j]<<" ";
}
cout<<endl;
for (j=0; j<nums.size(); ++j)
{
cout<<nums[j]<<" ";
}
cout<<endl;
// result
for (num=nums.begin(); num!=nums.end(); ++num)
{
if (num==nums.begin())
{
*num=suffix_products[distance(nums.begin(),num)+1];
}
else if (num!=nums.end())
{
*num=prefix_products[num - nums.begin()-1] * suffix_products[num - nums.begin()+1];
}
else
{
*num=prefix_products[distance(nums.begin(), nums.end()-2)];
}
};
// result printer
for (j=0; j<nums.size(); ++j)
{
cout<<nums[j]<<" ";
}
cout<<endl;
return 0; };
预期: 120 60 40 30 24
actual_1: 120 60 40 30 24
actual_2: 120 60 40 30 0
actual_3: 120 60 40 30 -1182602672
actual_4: 120 60 40 30 786408 。 。