Как обратиться к полям и методам объектов, которые находятся в векторе?

Вот, например, у меня есть такой класс:

class students
{
public:
    string name;
    int score;
    int age;
    students(string name, int score, int age)
    {
        this->name = name;
        this->score = score;
        this->age = age;
    }
};

И вот такой вектор:

vector<students> vc =
    {
        students("Ваня", 124, 22),
        students("Саша", 140, 24),
        students("Миша", 127, 19),
        students("Вася", 131, 22),
        students("Максим", 119, 19),
        students("Сережа", 141, 25),
        students("Леша", 116, 18),
        students("Олег", 121, 18)
    };

Вопрос: можно ли как-то по индексу ячейки вектора (или еще по чему-то) обратиться к полям и методам объекта, который находится в этой ячейке? Например, я хочу установить объекту, который находится в 3 ячейке, другое значение в поле score, но именно через точку, а не через конструктор. Как я могу и могу ли вообще это сделать?


Ответы (1 шт):

Автор решения: Harry

Запросто:

vc[2].score = new_value;

Конечно, пока поля объявлены как public.

Можно только предложение? А именно - переписать конструктор без лишних копирований:

students(const string& name, int score, int age):name(name),score(score),age(age){}

И - мелочь, конечно - но при беглом взгляде кажется, что students - студенты - это и есть вектор. А один - все-таки student. А чтоб отличать тип от объекта - я бы воспользовался стандартным соглашением, что имя пользовательского типа начинается с прописной буквы - Student...

→ Ссылка