2011-08-06 41 views
0

爲列表迭代我可以訪問不同的元素C++列表迭代中的同一物體訪問不同的元素

,但我只能訪問列表中的我可以訪問每個對象 例如

class student{ 
private : 
string firstname; 
string lastname; 
// some other variables //etc... 

public: 
// some functions here .... 
}; 

一件事和使用List Iterators打印所有名字 但是如何打印 名字後跟列表中的姓氏?

+2

什麼是列表?一個std :: list? – Klaim

+2

爲什麼你不能像姓名一樣對姓氏做同樣的事情? –

回答

3

這是什麼,我認爲你是在談論:如果沒有,請提供一些更多的細節。

我想你已經有了一個student一個std::list,像

std::list<student> studentList; 
//add student instances to list 

然後你遍歷它,像這樣:

for(std::list<student>::it = studentList.begin(); it != studentList.end(); ++it) 
{ 
    std::cout << it->getFirstName() << std::endl; 
} 

如果是這種情況,只需加一點it->getLastName()

for(std::list<student>::it = studentList.begin(); it != studentList.end(); ++it) 
{ 
    std::cout << it->getFirstName() << " " << it->getSecondName() << std::endl; 
} 
0

簡單! cout它的名字後面跟着姓。

cout << lIter->firstName << " " << lIter->lastName << endl ; 
// firstName, lastName are private. So, intead write getters and call those on list iterator. 

還是我明白這個問題錯了?

+0

嗡嗡聲我做到了這一點,它只保留最後一件事情在結束之前,因爲某種原因,這是你的情況下的姓氏 – ricedragon

2

您可以使用相同的方式打印lastname,您可以打印firstname。如果在類的成員函數打印出來,然後你可以這樣做:

std::cout <<firstname <<" " <<lastname << std::endl; 

如果你已經寫了一些get功能,你從類的非成員函數打印出來,然後你可以這樣做:

student s; 
//... 
std::cout <<s.getFirstname() <<" " <<s.getLastname() << std::endl; 

您還可以添加operator<<友元函數的類,如:

class student{ 
private : 
    string firstname; 
    string lastname; 
    // some other variables //etc... 

public: 
    // some functions here .... 
    friend std::ostream& operator<<(std::ostream & out, const student &s) 
    { 
     return out << s.firstname <<" " <<s.lastname; 
    } 
}; 

然後做到這一點:

std::list<student> students; 
//... 

for(std::list<student>::iterator it = students.begin(); it != students.end(); it++) 
{ 
     std::cout << *it << std::endl; 
} 

你甚至可以這樣做:

student s; 
//... 
std::cout << s << std::endl; //it prints firstname and lastname by calling operator<<