предварительное увеличение не работает, как я ожидаю

Я пытаюсь научиться динамическому программированию, решая некоторые вопросы онлайн. Один вопрос, с которым я столкнулся, требует обработки следующего ввода

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

Я знаю, что это должна быть какая-то основная ошибка.
Заранее спасибо,

3

Решение

Вам не хватает точки последовательности здесь:

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

Запятая в объявлении одна, запятой в функции нет:

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

Пожалуйста, посмотрите на: http://en.wikipedia.org/wiki/Sequence_point

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]