我有这个继承vector的新类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;
}
然后我在main函数中调用此迭代器。我实际上尝试但它不编译,我不知道除了这个使用什么语法:
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 :(得分:2)
Seq&lt;矢量&lt; T> &gt; :: iterator在Seq类中定义?
制作模板'vector'的参数并不意味着存在类型Seq&lt;矢量&lt; int&gt; &GT; ::迭代
答案 1 :(得分: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 :(得分: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
答案 3 :(得分:0)
一点注意事项:
更改vector
后,尤其是在附加或插入时,它的迭代器将变为无效。这是因为vector
试图为其内部数据分配最小尺寸的连续内存块,同时它试图最小化分配新的更大块的需要的次数。因此,数据可能会在内存中移动,因此在 push
之前的迭代器 之后不再有效。
另一个小小的说明:
您可以使用std::difference( it1, it2 )
找到两个迭代器之间的差异。您可以使用std::advance( it1, d )
重新应用该差异。
第三个小记:
你似乎在for循环中有一个'return'语句,但其余代码使用的函数只在返回时设置...