2014-10-26 2 views
-4

Возвращает ли вектор false, если элемент не существует? Я пытаюсь выполнить итерацию по вектору и распечатать каждый отсортированный элемент до тех пор, пока они существуют. Вот фрагмент кода, я работаю с:Vector C++ Сортировка и печать

typedef struct { 
    string Name; 
    map<string,string> Numbers; 
} Person 

bool ComparebyAlpha(const Person &person1, const Person &person2) { 
    return person1.Name < person2.Name; 
} 

voic print_Contacts(vector <Person> Contacts) { 
    sort(Contacts.begin(), Contacts.end(), ComparebyAlpha); 
    int num = 0; 
    while (Contacts[num]) { 
     cout << Contacts[num].Name; 
     num++; 
    } 
} 

ответ

2

Вместо того, while петли,

while (Contacts[num]) { 
    cout << Contacts[num].Name; 
    num++; 
} 

вы можете просто использовать for петлю для этого

for (auto const& person: Contacts) 
{ 
    cout << person.name; 
} 

Или

for (auto iter = Contacts.begin(); iter != Contacts.end(); ++iter) 
{ 
    auto person= *iter; 
    cout << person.name; 
} 

Предпочтительно, чтобы итерационные контейнеры stl использовали iterators, поэтому вы не индексируете за пределами диапазона, так как они используют begin и end.

1

Нет, это будет неопределенное поведение, если вы попытаетесь получить доступ к элементу вектора за его пределами.

Вы могли бы написать просто

for (const Person &person : Contacts) cout << person.Name << endl; 
Смежные вопросы