2016-11-07 2 views
0

Ich habe eine Frage über Iteratoren auf list s. In function muss ich die double s vergleichen, aber ich weiß nicht, wie man die Elemente von der zweiten Ebene mit nur Iteratoren auf die erste Ebene bekommt.C++ Iteratoren in Listen

void function (std::list<std::list <double>>::iterator *begin, std::list<std::list <double>>::iterator *end) 
{ 
    //do something 
} 

int main() 
{ 
    std::list <std::list <double>> a_list; 
    function (a_list.begin(), a_list.end()); 
} 
+0

Können Sie mehr Detail Ihrer zweiten Ebene Anforderung geben? –

+0

Zuallererst sollte 'function' die Iteratoren nach Wert nehmen, nicht Zeiger auf Iteratoren. Dann kommt es darauf an, wie genau man die "Doppel" vergleichen will. Sie sollten erweitern, was Sie damit meinen. – Quentin

+0

Ich hoffe, meine Lösung bietet die Lösung für Ihre Zweifel –

Antwort

1
void function (list<list <double> >::iterator begin, list<list <double> >::iterator end) 
{ 
    for(std::list<std::list <double> >::iterator it =begin;it!= end;it++) 
    { 
     for(std::list <double>:: iterator it_inner = (*it).begin(); it_inner != (*it).end();it_inner++) 
     { 
      printf("%f ",*it_inner); 
     } 
     printf("\n"); 
    } 

} 



int main() 
{ 
    std::list <std::list <double> > a_list; 
    for(int i=0;i<=3;i++) 
    { 
     std::list <double> inner_list; 
     for(double j=0;j<=8;j+=2.2) 
     { 
      inner_list.push_back(j); 
     } 
     a_list.push_back(inner_list); 
    }  
    function (a_list.begin(), a_list.end()); 
} 
0

Sie die Iteratoren als Parameter übergeben können oder einfach nur die gesamte Liste, wie folgt aus:

#include <iostream> 
#include <list> 

using namespace std; 

void funcA (list<list<double>>::iterator begin, list<list<double>>::iterator end) { 
    //do something 

    list<double>::iterator sublist1 = begin->begin(); 
    cout << *sublist1 + 1 << endl; 
} 

void funcB (list<list<double>> list) { 

    for (auto&& sublist: list) { 
     for (auto&& value: sublist) { 
      cout << value << ' '; 
     } 
    } 
    cout << endl; 
} 


int main() { 
    list <list<double>> a_list = {{1,2,3},{4,5,6}}; 

// list<list<double>>::iterator a = a_list.begin(); 
// list<double>::iterator b = a->begin(); 
// 
// cout << *b + 2 << endl; 

    funcA(a_list.begin() , a_list.end()); 
    funcB(a_list); 
}