[英]why distance(iterator,vector.begin()) returns a random number?
我正在編寫如下代碼。 無論我如何調用“下一個”方法,迭代器it
和vector.begin()
之間的距離都會返回一個隨機數,永遠不會返回我調用的next
方法的編號。 有人可以向我解釋一下嗎? 我在底部顯示了運行時錯誤。
#include <vector>
#include<iostream>
#include<algorithm>
using namespace std;
class Vector2D {
::vector<::vector<int>> vector;
std::vector<std::vector<int>>::iterator it;
std::vector<int>::iterator inner;
public:
Vector2D(std::vector<std::vector<int>>& vec):vector(vec),it(begin(vec)),inner(it->begin()){
}
int next() {
if(it != (vector.end()-1)&& inner != it->end()-1)
{ inner++;
std::cout<<"it position:"<<distance(it,vector.begin())<<endl;
return *inner;
}
else if (it != (vector.end()-1)&& inner == it->end()-1)
{ advance(it,1);
std::cout<< "it position:"<<std::distance(it,vector.begin())<<endl;
if(it != vector.begin()+1){
std::cout<<"weird"<<endl;
}
inner=it->begin();
return *inner;
}
else if (it == (vector.end()-1)&& inner != it->end()-1)
{
inner++;
return *inner;
}
else
{
return -1;
}
}
};
錯誤如下:
Line 815: Char 16: runtime error: reference binding to misaligned address 0xbebebebebebebebe for type 'int', which requires 4 byte alignment (stl_iterator.h)
0xbebebebebebebebe: note: pointer points here
<memory cannot be printed>
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_iterator.h:820:16
it(begin(vec))
it
指向vec
。
it.= (vector.end()-1)
您將it
與vector
的迭代器進行比較。 vector
與vec
不是同一個容器。 您比較的迭代器不是同一個容器,因此程序的行為是未定義的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.