c++ - 预增量没有像我预期的那样工作

标签 c++ pre-increment

我正在尝试通过在线解决一些问题来学习动态规划。我遇到的一个问题需要处理以下输入

4 10 3 4 4 5 6 7 5 7

第一个指向项目数量,第二个指向总容量,其余四个(成对)现在应该指向值(value)和容量。

我遇到的问题是解析它的代码。

#include<iostream>
#include<map>
#include<iterator>
using namespace std;

template<typename T>
void print(typename T::const_iterator start,
           typename T::const_iterator end)
{
    typename T::const_iterator itr=start;
    while(itr!=end)
    {
        std::cout << itr->first << " " << itr->second << std::endl;
        itr++;
    }
}

int main()
{
    int _M_N; // total numbers
    int _M_V; // total values
    std::map<int,int> _M_Values; 

    istream_iterator<int> isi(cin); 
    _M_N = *isi;
    _M_V = *++isi;

    for(int i=0;i<_M_N;i++)
    {
        //int m=*++isi,n=*++isi;
        //_M_Values.insert(make_pair(m,n));
        _M_Values.insert(make_pair(*++isi,*++isi)); 
    }
    print<std::map<int,int> >(_M_Values.begin(),_M_Values.end()); 
}

当我运行这个程序时,我得到了这个输入的错误输出

   akhetarp@desktop> knapsack < test
   4 3 
   5 4 
   7 6

但是,如果我取消注释该行并注释较早的插入行,我会得到预期的结果

   int m=*++isi,n=*++isi;
   _M_Values.insert(make_pair(m,n));
   // _M_Values.insert(make_pair(*++isi,*++isi));

   3 4
   4 5 
   6 7 
   5 7 

我知道这一定是一些基本错误。 提前致谢,

最佳答案

你在这里遗漏了一个序列点:

 _M_Values.insert(make_pair(*++isi,*++isi)); 

声明中的逗号是一个,函数中的逗号不是:

int m=*++isi,n=*++isi;

请看一下:http://en.wikipedia.org/wiki/Sequence_point

关于c++ - 预增量没有像我预期的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18426473/

相关文章:

Java:前、后缀运算符优先级

c++ - 调用函数对象时如何保证参数评估的顺序?

html - 在 C++ linux 中使用 log4cplus 将日志写入 html 文件

C++ 我可以用 1 个循环替换嵌套循环吗

c - 我不明白这段代码的输出

php - echo++$a + $a++ 的输出应该是什么

c# - arr[0]++ 和++arr[0] 的区别

c++ - 数组大小成员函数编译错误

c++ - 在 C++ 中计算具有不同列数的数字的不同组合?

c - C 函数调用中后缀或前缀递增的未定义行为