【发布时间】:2018-09-04 22:02:35
【问题描述】:
我有以下代码:
std::list<std::tuple<int,double>> myList; //assume it is empty
std::map<int,double> myMap; //assume it has values
for (auto m_itr = myMap.begin(); m_itr != myMap.end();){
myList.push_back(std::make_tuple(m_itr->first,m_itr->second));
m_itr = myMap.erase(m_itr);
}
但它会引发以下异常:
"list iterators incompatible"
如何解决此异常?我想确保地图中没有元素已经在列表中。
【问题讨论】:
-
应该是
m_itr = myMap.erase(m_itr);或myMap.erase(m_itr++); -
改造后延迟
myMap.clear()怎么样? -
提示:
erase返回一些东西。使用它。 -
@Slava 好的,所以我想我应该做 m_itr = myMap.erase(m_itr) 但现在我得到了异常“列表迭代器不兼容