2016-11-07 71 views
0

我有一個關於list s上的迭代器的問題。在function我必須比較double s,但我不知道如何從第二級獲取元素,只有迭代器到第一級。列表中的C++迭代器

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

你能給你的第二個層次的要求更詳細? –

+0

首先,'function'應該通過值獲取迭代器,而不是指向迭代器的指針。那麼,這取決於你想如何「比較'雙'」。你應該擴展你的意思。 – Quentin

+0

希望我的解決方案爲您的疑問提供解決方案 –

回答

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

您可以通過迭代器作爲參數或只是整個列表,就像這樣:

#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); 
}