我不知道下面的代码有什么问题,它应该读取数字并将它们的值与位置放在一起,然后对它们进行排序并打印出位置。我删除了排序部分 - 我认为问题存在,但我再次收到编译错误。
#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;
}
请告诉我问题出在哪里。感谢。
答案 0 :(得分:3)
在循环外创建变量并在循环中重复使用它通常是不好的形式,如果你使用它的唯一地方是在那个循环中。只有在施工成本高且重新分配比重新分配更便宜时才这样做。通常,C ++变量应该在它们使用的范围内声明,以便更容易阅读程序的每个部分,并能够在以后重新考虑它。
在您的情况下,我会完全删除对temp
的引用,并将push_back调用更改为v.push_back(make_pair(t, i+1))
。
答案 1 :(得分:2)
问题是temp(t, i+1);
您需要手动设置第一个和第二个
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);
}
或者第二个替代,使用make_pair帮助函数,完全取消temp(感谢KennyTM提醒)
for(i=0;i<n;i++)
{
cin >> t;
v.push_back(make_pair(t, i+1));
}
希望这有帮助