Xcode C ++错误:代码相同,但运行时输出发生变化

时间:2019-06-06 08:52:09

标签: c++ xcode

该代码将获得除其自身以外的所有其他元素的乘积。

它使前缀乘积和后缀乘积都得到结果。

我的输出与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 。 。

0 个答案:

没有答案