2015-10-23 3 views
-1

У меня есть парный вектор, как этотC++: pop_back парный вектор

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(); 
     } 

} 
+1

Как вы знаете, он не удаляет его из вектора? Вы проверяли, изменился ли размер? – NathanOliver

+0

Вывод одинаков для всех времен. Нет, нет. –

+2

вы едете на велосипеде по 'j' и получаете доступ к' i' ..., который уже достаточно странный, покажите нам остальную часть кода, когда вы проверите, было ли оно удалено. – bznein

ответ

1

Рассмотрим следующие изменения:

имя изменения переменной i внутри цикла в j

и вы можете вызвать 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; 
} 
0

Существует множество проблем с примером, который вы опубликовали.

Первый - это то, что вы перебираете список с помощью j, но получаете доступ к Names с индексом i. Тем не менее, даже если вы исправили, что получите сбои, потому что вы итерации вперед через вектор, но сбрасывая назад, это означает, что вы в конечном итоге получите ошибку за пределами диапазона, так как итерационный указатель пройдет через длина списка.

Если вы хотите удалить все товары за один раз, то вам следует просто позвонить Names.clear().

Кроме того, это плохая форма, использующая C++ и не использующая способ итерации через списки C++.

Рассмотрим изменить свой второй цикл на следующее:

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

Тогда, наконец, назвать это:

Names.clear(); 
Смежные вопросы