2015-11-12 70 views
0

我收到編譯錯誤「圖/設置」迭代不dereferencable。」這是怎麼回事呢?地圖迭代器不dereferencable

#include<iostream> 
#include<map> 

using namespace std; 

int main(){ 
    map<int, int> m; 
    map<int, int>::iterator itr=m.begin(); 

    itr->first = 0; 
    itr->second = 0; 

    cout << itr->first << " " << itr->second; 
    return 0; 
} 
+0

空'map'。而且,'key'不可修改。 – Jarod42

回答

2

地圖是空的,所以m.begin()等於過去最末端迭代器,因此是無效的。

你首先必須insert元素(你也可以通過使用operator[]隱式地做到這一點)使它有用。

此外,你不能修改這樣的元素的關鍵。您必須從地圖中刪除(erase)元素並使用新密鑰插入新元素。

這裏有一個關於一個例子:

#include<iostream> 
#include<map> 

using namespace std; 

int main(){ 
    map<int, int> m; 

    // insert element by map::insert 
    m.insert(make_pair(3, 3)); 

    // insert element by map::operator[] 
    m[5] = 5; 

    std::cout << "increased values by one" << std::endl; 
    for(map<int, int>::iterator it = m.begin(); it != m.end(); ++it) 
    { 
     it->second += 1; 
     cout << it->first << " " << it->second << std::endl; 
    } 

    // replace an element:   
    map<int, int>::iterator thing = m.find(3); 
    int value = thing->second; 
    m.erase(thing); 
    m[4] = value; 

    std::cout << "replaced an element and inserted with different key" << std::endl; 
    for(map<int, int>::iterator it = m.begin(); it != m.end(); ++it) 
    { 
     cout << it->first << " " << it->second << std::endl; 
    } 

    return 0; 
} 
1

map是空的!你的迭代器指向是不確定的。

你想要做什麼是

int main(){ 
    map<int, int> m; 
    m[0] = 0; 
    map<int, int>::iterator itr=m.begin(); 

    cout << itr->first << " " << itr->second; 
    return 0; 
} 
1

在這裏,你還沒有分配任何價值。你不能更改它的密鑰itr->first。它可以只讀。但你可以編輯itr->second

map<int, int> m; 
    m[10]=0; 
    map<int, int>::iterator itr=m.begin(); 


     itr->second=10; 
    cout << itr->first << " " << itr->second;