2009-04-08 74 views
1

我有這個新的類Seq繼承向量,並有一些額外的功能。我可以在Seq中使用所有的矢量方法。函數返回向量的迭代器

具有這種數據結構:

Seq< vector<int> > sweepEvents; 

我想有一個函數,它爲它的元素向量邊搜索中sweepEvents和迭代器返回到發現元件的位置在sweepEvents(當且僅如果找到edge)並且迭代器到該向量的最後元素(當且僅當沒有找到edge時)。

然後我想用這個迭代器,因爲我想比較迭代器的prev和下一個位置的元素。

我有創始並返回迭代器有以下功能:

Seq< vector<int> >::iterator QSweep::insertSweepEvents(edge_t edge,int currentDim){ 
    int changePosition; 
    int found=0; 

    for (int i=0;i<currentDim;i++){ 
     if (edge[0]==sweepEvents[i][1]){ 
      changePosition=i; 
      found=1; 
      return sweepEvents.begin()+changePosition; 
     } 
    } 
    if (found==1){ 
     sweepEvents.rep().insert(sweepEvents.begin()+changePosition,edge); 
     sweepEvents.rep().erase(sweepEvents.begin()+changePosition+1); 
    } 
    else{ 
     sweepEvents.rep().insert(sweepEvents.end(),edge); 
    } 

    return sweepEvents.end()-1; 
} 

我再調用這個迭代器的主要功能。其實,我試過,但它不編譯,我不知道比這要使用什麼語法其他:

int main(){ 
    Seq< vector<int> > sweepEvents; 
    vector<int> edge; 
    //.....initialize sweepEvents and edge 

    //declare iterator but not working 
    Seq< vector<int> >::iterator comparePosition; 

    //not working neither 
    comparePosition=insertSweepEvents(edge,sweepEvents.size()); 
} 

上我應該如何正確地調用迭代任何想法?我發現它不能用作數組中的整數索引?

+0

你意思是「不工作」?錯誤的結果,編譯器錯誤,核心? – bayda 2009-04-08 08:06:02

+0

編譯器錯誤,用於定義comparePosition並隨後分配comparePosition。 – madalina 2009-04-08 08:11:46

+0

你的if(found == 1)塊永遠得不到執行,因爲當你設置found = 1時你會返回...... 你在哪個編譯器中得到哪些編譯器錯誤? – mentat 2009-04-08 08:12:32

回答

0

代碼中的某些東西不合邏輯。看我的意見:

int found = 0; 
for (int i=0;i<currentDim;i++){ 
    if (edge[0]==sweepEvents[i][1]){ 
       changePosition=i; 
       found=1; 
// This place is one, where we assign 1 to found, and we do return after that (maybe you want do break/?) 
       return sweepEvents.begin()+changePosition; 
     } 
} 
if (found==1){ // as you see we reach this place only when found == 0 
1

什麼編譯錯誤?如何定義Seq<X>::iterator

#include <vector> 

template<typename T> 
struct Seq 
    : public std::vector<T> 
{ }; 

typedef Seq< std::vector<int> > SeqI; 

SeqI::iterator insertSweepEvents(SeqI &s) 
{ 
    return s.begin(); 
} 

int main() 
{ 
    SeqI s; 
    SeqI::iterator e = insertSweepEvents(s); 
} 

這工作正常。

2

是Seq < vector < T>> ::在您的Seq類中定義的迭代器?

製作模板「載體」的參數,並不意味着所存在的類型SEQ <矢量< INT>>:迭代

0

小旁註:

一個vector之後被改變,尤其是當附加到或插入到迭代器中使其失效。這是因爲vector試圖爲其內部數據分配一個最小尺寸的連續內存塊,同時它會盡量減少分配新的更大塊所需的次數。所以數據可能會通過內存,所以迭代器之前 a push不再有效之後它。

另一個小記:

您可以通過使用std::difference(it1, it2)找到兩個迭代器之間的差異。您可以使用std::advance(it1, d)重新應用該差異。

第三小記:

你似乎有一個「return」語句內的for循環,但代碼的其餘部分使用返回時只設置變量...