簡體   English   中英

為什么 distance(iterator,vector.begin()) 返回一個隨機數?

[英]why distance(iterator,vector.begin()) returns a random number?

我正在編寫如下代碼。 無論我如何調用“下一個”方法,迭代器itvector.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)

您將itvector的迭代器進行比較。 vectorvec不是同一個容器。 您比較的迭代器不是同一個容器,因此程序的行為是未定義的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM