PDA

Просмотр полной версии : std::list поиск


fucker"ok
06.02.2008, 00:00
Нужно избавиться от одной лишней операции в коде, дабы её 100% можно заменить, но вот с указателями и тп я не дружу

#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, дабы в дальнейшем я мог их сравнивать.

Forcer
06.02.2008, 00:34
#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;

}