c – 预增量不按预期工作
作者:互联网
我试图通过在线解决一些问题来学习动态编程.我遇到的一个问题需要处理以下输入
4
10
3 4
4 5
6 7
5 7
项目数量的第一个点,第二个总容量和四个中的其余点(成对)现在应该指向值和容量.
我遇到的问题是解析它的代码.
#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
标签:pre-increment,c 来源: https://codeday.me/bug/20190725/1533345.html