2014-10-26 83 views
-4

如果元素不存在,返回false嗎?我試圖遍歷一個矢量,並且只要它們存在就打印出每個已排序的元素。這裏的代碼片段,我一起工作:向量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; 
} 

最好使用iterators迭代stl容器,因爲它們使用的是beginend,所以您不要索引超出範圍。

1

不,如果您嘗試訪問超出其大小的矢量元素,它將是未定義的行爲。

你可以寫簡單

for (const Person &person : Contacts) cout << person.Name << endl;