2014-01-19 3 views
0

У меня есть небольшая проблема с использованием векторов. У меня есть вектор, в котором хранятся персональные объекты, созданные классом Staff.Доступ к функциям-членам от вектора

vector <Staff> staffList; 
vector <Staff>::iterator sit; 

Я добавил несколько предметов персонала в этот вектор. Мой класс персонал имеет такие методы, как:

Staff getStaffAccount(string); 
int getAccessLevel(); 
string getUserName(); 
int getStaffID(); 
string getPassword(); 
void setStaffIDNumber(int const); 
void setUsername(string); 
void setPassword(string); 
void setAccessLevel(int); 
static void changePassword(Staff*); 

Когда мне нужно изменить объект персонала, что я делаю, чтобы получить объект персонала и изменить его. Это, как я получаю объект персонала:

Staff* Staff::searchByID(int staffID){ 
const int vectorSize = staffList.size(); 
for (int i=0; i<vectorSize; ++i){ 
    if (staffList[i].getStaffID() == staffID){ 
     return &staffList[i]; 
     break; 
     } 
    } 
return NULL; 
} 

Теперь после того, как я изменение объекта я понятия не имею, как сохранить измененный объект в вектор. Например, я могу установитьPassword() для объекта staff, пароль будет изменен так долго , что объект находится в памяти. Но как только он будет уничтожен и снова загружен с вектора, пароль был сброшен до предыдущего значения, которое было в векторе.

  • Могу ли я модифицировать штатный объект, пока он находится в векторе?
  • Если да, то как я могу искать объекты персонала в векторе? (Для поиска я наткнулся на вектор :: найти метод, но я не знаю, как использовать его на объектах.
+0

Поскольку вы используете указатель, вы уже изменяя исходный объект, расположенный в списке – Gasim

+0

Вы должны опубликовать сообщение SSCCE (см. Sscce.org), показывающее, как сбой изменений. – juanchopanza

ответ

1

Вместо того, чтобы использовать для цикла вы можете использовать

Staff* Staff::searchByID(int staffID){ 
    auto i = std::find_if(staffList.begin(), staffList.end(); [staffID](Staff &s) { 
     return s.getStaffID() == staffID; 
    }); 

    if(i != staffList.end()) return &(*i); 
    return NULL; 
} 

К фактической . вопрос Потому что вы используете указатель, оригинал должен изменить

EDIT:. Вот код теста: http://ideone.com/HQV6Md

+3

Не понял, что OP был * указателем *. Ему должно быть тяжело. – Shoe

+2

@Jefffrey: Голый указатель, на котором :-( –

+0

Это действительно заставило меня смеяться. Исправлено: P – Gasim

Смежные вопросы