1

次のコードの何が問題になっているのかわかりません。数値を読み取り、その値と位置をペアのベクトルにまとめてから、並べ替えて位置を出力する必要があります。並べ替えでパーツを削除しました-問題があると思いましたが、コンパイル時にエラーが発生しました。

#include <iostream>                                                                                                           
#include <vector>                                                                                                             
#include <algorithm>                                                                                                          
#include <utility>                                                                                                            
using namespace std;                                                                                                          

int main(void)
{
        unsigned int n,d,a[65],b[65],s,i,j,t,us=0;
        pair<unsigned int,unsigned int> temp;
        vector< pair<unsigned int,unsigned int> > v;
        cin >> n;
        for(i=0;i<n;i++)
        {
                cin >> t;
                temp(t, i+1);
                v.push_back(temp);
        }
        cin >> d;
        for(i=0;i<d;i++) cin >> a[i] >> b[i];
        for(i=0;i<v.size();i++)
        {
                cout << v[i].first << " -- " << v[i].second << endl;
        }
        return 0;
}

問題はどこにあるのか教えてください。ありがとう。

4

2 に答える 2

3

ループの外側で変数を作成し、それを使用する場所がそのループ内だけである場合、ループ内で何度も再利用することは一般的に悪い形式です。これは、建設コストが高く、再作成するよりも再割り当てする方が安価な場合にのみ行ってください。一般に、C++ 変数は、プログラムの各部分を読みやすくし、後でリファクタリングできるようにするために、使用されるスコープで宣言する必要があります。

あなたの場合、への参照をtemp完全に削除し、push_back 呼び出しを に変更しv.push_back(make_pair(t, i+1))ます。

于 2010-03-02T13:30:14.180 に答える
2

問題はtemp(t, i+1);

1番目と2番目を手動で設定する必要があります

temp.first = t;
temp.second = i + 1;

または、ループ内でtempを宣言することもできます(おそらく私が行うことです)。

for(i=0;i<n;i++) 
{ 
    cin >> t; 
    pair<unsigned int,unsigned int> temp(t, i+1); 
    v.push_back(temp); 
} 

または、2番目の代替手段として、make_pairヘルパー関数を使用し、tempを完全に廃止します(リマインダーを提供してくれたKennyTMに感謝します)

for(i=0;i<n;i++) 
{ 
    cin >> t; 
    v.push_back(make_pair(t, i+1)); 
} 

お役に立てれば

于 2010-03-02T13:25:38.773 に答える