std::map::const_iterator的奇怪行为
Strange behavior or std::map::const_iterator
我正在创建迭代器:
typename Report::container_type_for_processed_files::const_iterator beg = rep.processed_files().begin();
typename Report::container_type_for_processed_files::const_iterator end = rep.processed_files().end();
my Report class looks:
class Report
{
public:
typedef std::map<boost::filesystem3::path,
std::pair<unsigned long long/*code*/,
unsigned long long/*comment*/> > container_type_for_processed_files;
container_type_for_processed_files processed_files()const;
private:
container_type_for_processed_files processed_files_;
};
在cpp中处理的文件看起来像:
typename Report::container_type_for_processed_files Report::processed_files()const
{
return processed_files_;
}
,但在初始化迭代器之后,如第一行所示:
typename Report::container_type_for_processed_files::const_iterator beg = rep.processed_files().begin();
typename Report::container_type_for_processed_files::const_iterator end = rep.processed_files().end();
while (beg != end)
{
qDebug() << beg->first.c_str();//here I'm getting runtime error
fout << "File name: " << (beg->first).c_str();
++beg;
}
我得到错误:传递给C运行时函数的参数无效。
当尝试初始化迭代器时,我也在输出窗格上获得消息:
(内部错误:pc 0x201在读取psymtab,但没有在symtab)
这是怎么呢
没有可编译的示例,我不确定这是您的问题,但这看起来很可疑:
container_type_for_processed_files processed_files() const;
你应该很有可能返回一个const&
到那里的容器,否则该函数将返回(可能是临时的)底层容器的副本,并且你的迭代器将最终无效(不是对同一对象的迭代器,可能是对生命周期已经结束的临时对象的迭代器)。
试一试:
container_type_for_processed_files const& processed_files() const;
一个问题是rep.processed_files()
返回底层容器的副本。因此,beg
和end
适用于两个单独的对象;尝试从一个map的开头迭代到另一个map的末尾是没有意义的——它会迭代到第一个容器的末尾。您应该返回对所包含对象的引用。
typename Report::container_type_for_processed_files & Report::processed_files()const
{
return processed_files_; // Returns by reference
}
在定义beg和end时需要&
typename Report::container_type_for_processed_files::const_iterator & beg = rep.processed_files().begin();
typename Report::container_type_for_processed_files::const_iterator & end = rep.processed_files().end();
可能还有其他问题,如其他人提出的。例如:qDebug
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++:当所有条目都保证是唯一时,替代 std::map
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 错误:与'operator='不匹配(操作数类型为"std::map<int、double>::iterator
- 自动,错误:MAP ITERATOR没有名为“ First”的成员
- std::map<K,V>::iterator 是否实例化 std::map<K,V>?
- 关于从第二个存储值_ty2秒复制std :: Map Iterator的数据的问题
- c++ std::map::iterator一无所获,但下标操作符返回对映射值的引用
- Std::map::iterator对单个元素进行自减
- map<int、int>::iterator 的编译错误,运算符 = 不匹配
- C++ typedef, map, iterator
- 将map<>::iterator作为map<>::const_iterator传递