Нужно избавиться от одной лишней операции в коде, дабы её 100% можно заменить, но вот с указателями и тп я не дружу PHP: #include <iostream> #include <list> #include <string> using namespace std; struct Someshit { string name; int id; }; int main(int argc, char *argv[]) { Someshit some, tmp; list <Someshit> somelist; some.name="aa"; somelist.push_back(some); some.name="bb"; somelist.push_back(some); some.name="cc"; somelist.push_back(some); //и подобного много раз list <Someshit>::iterator listpos; int i = 0; for (listpos = somelist.begin(); listpos != somelist.end(); listpos++) { tmp = *listpos; //НЕ НУЖНОЕ И не желательное действие i++; if (tmp.name == "bb") cout << i << " BB найдено \n"; //а вот это нужно как-то сделать через listpos if (tmp.name[0] == 'c') cout << i << " первая C найдена \n"; // и это тоже } return 0; } Так-вот от копирования в переменную tmp мне и нужно избавиться, тоесть я хочу добираться до элементов структуры через lispos, дабы в дальнейшем я мог их сравнивать.
Code: #include <iostream> #include <list> #include <string> using namespace std; struct Someshit { string name; int id; }; int main(int argc, char *argv[]) { Someshit some; // здесь изменено - убрана переменная tmp list <Someshit> somelist; some.name="aa"; somelist.push_back(some); some.name="bb"; somelist.push_back(some); some.name="cc"; somelist.push_back(some); //и подобного много раз list <Someshit>::iterator listpos; int i = 0; for (listpos = somelist.begin(); listpos != somelist.end(); listpos++) { i++; if (listpos->name == "bb") cout << i << " BB найдено \n"; // здесь изменено if (listpos->name[0] == 'c') cout << i << " первая C найдена \n"; // здесь изменено } return 0; }