Итераторы списка C ++, обращающиеся к различным элементам в одном и том же объекте - PullRequest
0 голосов
/ 07 августа 2011

для Итераторов Списка я могу получить доступ к различным элементам

но я могу получить доступ только к одной вещи на объект например,

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

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

в списке я могу получить доступ и распечатать все имя с помощью Итераторов списка но как мне распечатать имя следует за фамилией в списке?

Ответы [ 3 ]

3 голосов
/ 07 августа 2011

Я думаю, это то, о чем вы говорите: если нет, пожалуйста, дайте больше подробностей.

Я так понимаю, у вас есть std::list из student, как

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;
}
2 голосов
/ 07 августа 2011

Вы можете напечатать 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<<
0 голосов
/ 07 августа 2011

Просто! cout имя, за которым следует фамилия.

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

Или я неправильно понял вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...