std::list поиск

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by fucker"ok, 5 Feb 2008.

  1. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    578
    Likes Received:
    274
    Reputations:
    91
    Нужно избавиться от одной лишней операции в коде, дабы её 100% можно заменить, но вот с указателями и тп я не дружу
    PHP:
    #include <iostream>
    #include <list>
    #include <string>
    using namespace std;

    struct Someshit
    {
            
    string name;
            
    int id;
    };
    int main(int argcchar *argv[])
    {
            
    Someshit sometmp;
            list <
    Someshitsomelist;
            
    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 << << " BB найдено \n"//а вот это нужно как-то сделать через listpos
                    
    if (tmp.name[0] == 'c'cout << << " первая C найдена \n"// и это тоже
            
    }
            return 
    0;

    }

    Так-вот от копирования в переменную tmp мне и нужно избавиться, тоесть я хочу добираться до элементов структуры через lispos, дабы в дальнейшем я мог их сравнивать.
     
    #1 fucker"ok, 5 Feb 2008
    Last edited: 5 Feb 2008
  2. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    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; 
    
    } 
     
    1 person likes this.