C ++:Pop_back一个配对的向量

时间:2015-10-23 17:21:09

标签: c++ vector

我有一个像这样的配对矢量

 vector <pair<int , string> > Names;    

我以这种方式输入数据:

cin>>taxi>>Ar_taxis>>Ar_mathiton;

        for(j=0;j<Ar_mathiton;j++)
        {
            cin>>Ar_Mitroou>>Onoma;
            Names.push_back(make_pair(Ar_Mitroou,Onoma));

        }

我对它进行排序,然后打印出来:

  for(j=0;j<Ar_mathiton;j++)
        {
            cout<<Names[i].first<<" "<<Names[i].second<<endl;
           Names.pop_back();
        }

我的pop_back()存在问题,它不会删除对的集合。我不知道是否还有其他命令要做。感谢。

[编辑]整个代码

  cin>>Ar_taxeon;

for(i=0;i<Ar_taxeon;i++)
{
    cin>>taxi>>Ar_taxis>>Ar_mathiton;

        for(j=0;j<Ar_mathiton;j++)
        {
            cin>>Ar_Mitroou>>Onoma;
            Names.push_back(make_pair(Ar_Mitroou,Onoma));

        }

        sort(Names.begin(),Names.end());

        cout<<taxi<<Ar_taxis<<endl;
        for(j=0;j<Ar_mathiton;j++)
        {
            cout<<Names[i].first<<" "<<Names[i].second<<endl;
           Names.pop_back();
        }

}

2 个答案:

答案 0 :(得分:1)

请考虑以下更改:

将循环内变量i的名称更改为j

你可以在cout之后调用Names.clear(),而不是Names.popBack():

所以你的最终代码将是:

#include <iostream>
#include <vector>
using namespace std;
int main(){
vector <pair<int , string> > Names;

int Ar_mathiton,Ar_Mitroou;
string Onoma;
cin>>Ar_mathiton;

for(int j=0;j<Ar_mathiton;j++)
{
    cin>>Ar_Mitroou>>Onoma;
    Names.push_back(make_pair(Ar_Mitroou,Onoma));

}
for(int j=0;j<Ar_mathiton;j++)
{
    cout<<Names[j].first<<" "<<Names[j].second<<endl;

}
Names.clear();

return 0;
}

答案 1 :(得分:0)

您发布的示例存在各种问题。

第一个是您使用j迭代列表,但访问索引为Names的{​​{1}}。但是,即使您修复了因为向前遍历向量而导致崩溃,但弹出后退,这意味着最终会出现超出范围的错误,因为迭代索引遍历列表的长度。

如果您想一次删除所有项目,只需拨打i

即可

此外,使用C ++并且不使用C ++迭代列表的方式是不好的形式。

考虑将第二个循环更改为以下内容:

Names.clear()

最后,请致电:

for (auto& name : Names)
{
    cout << Names[j].first << " " << Names[j].second << endl;
}