簡體   English   中英

無法了解C ++中的迭代器行為

[英]Cannot understand iterator behavior in C++

#include<utility>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<map>
#include<vector>
#include<set>
#define M 100000
using namespace std;

int main() {
    map<char, vector<pair<char,int> > > graph;
    vector<pair<char,int> > vector1;
    vector1.push_back(pair<char,int>('B',4));
    graph['A'] = vector1;
    map<char,int> citydistances;
    citydistances['A'] = 0;

    vector<pair<char,int> >::iterator edge;
    for (map<char,int>::iterator i=citydistances.begin(); i!=citydistances.end(); ++i) {
        vector<pair<char, int> > cities = graph[i->first];
        for (vector<pair<char,int> >::iterator j=cities.begin(); j!=cities.end(); ++j) {
            if (citydistances.find(j->first)==citydistances.end()) {
                edge = j;
                //point 1
                cout<<edge->first<<endl;
            }
        }
    }
    //point 2
    cout<<edge->first<<endl;
    return 0;
}

我試圖盡可能地縮短代碼,以集中精力於行為異常的部分。 我不明白為什么點1和點2的edge->first值不同。 edge->first在點1是'B',在第二點是' '\\000' 。有人可以幫我嗎?

edge = j (只是前第1點),而j是一個迭代到載體中cities 在點2,向量已被破壞,因此取消引用edge( edge->first )將導致不確定的行為。

可以通過將cities作為參考來解決:

vector<pair<char, int> > &cities = graph[i->first];

暫無
暫無

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

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