我有一张这样定义的地图
std::map<some_key_type, std::string::iterator> mIteratorMap;
还有一个名为“mHugeString”的巨大字符串。然后我遍历字符串收集迭代器,如下所示:
std::string::iterator It=mHugeString.begin();
std::string::iterator EndIt=mHugeString.end();
for(;It!=EndIt;++It){
...defining a key element...
if(need_to_store_an_iterator)mIteratorMap[key_of_a_right_type]=It;
}
最后我应该收到一个映射,其中迭代器与某种键相关联。但是迭代器在通过“make_pair”与键配对时会以某种方式失去自己,除非它指向字符串末尾的某个位置。很难说,但也许最后 256 个字节没问题。
所以问题不在于如何避免丢失迭代器,无论如何存储它们是一个愚蠢的主意,但为什么尝试在字符串开头存储迭代器会失败,为什么最后的迭代器也能正常工作?它们之间有什么区别?