3

オンラインでいくつかの質問を解決することにより、動的プログラミングを学習しようとしています。私が遭遇した1つの質問では、次の入力を処理する必要があります

4 10 3 4 4 5 6 7 5 7

最初のポイントは項目数、2 番目は総容量、残りの 4 つ (ペア) は値と容量をポイントする必要があります。

私が抱えている問題は、それを解析するコードにあります。

#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 

私はそれがいくつかの基本的なエラーでなければならないことを知っています。前もって感謝します、

4

1 に答える 1

8

ここにシーケンスポイントがありません:

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

宣言のコンマは 1 ですが、関数のコンマはそうではありません。

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

ご覧ください: http://en.wikipedia.org/wiki/Sequence_point

于 2013-08-25T06:51:56.273 に答える