c++ - vector 迭代器不可解引用

标签 c++ stl

我有一个名为 Shape 的抽象基类,Circle 和 Rectangle 都派生自该基类,但是当我在 VS 2005 中执行以下代码时,出现调试断言失败的错误。同时我没有在任何类中重载 == 运算符

Expression:Vector iterator not dereferencable,这是什么原因。

  vector<Shape*> s1;
  s1.push_back(new Circle(point(1,2),3));
  s1.push_back(new Circle(point(4,3),5));
  s1.push_back(new Rectangle(point(1,1),4,5));

  vector<Shape*> s2(s1);
  reverse(s1.begin(),s1.end());

  (*find(s1.begin(),s1.end(),new Circle(point(1,2),3)))->move(point(10,20));

最佳答案

简单:

  • 查找失败,因为在比较 Shape 的 vector 中找不到您新创建的 Circle *
  • 失败的查找返回结束迭代器,该迭代器不可被 Debug 断言捕获

要让它按你想要的方式工作,你需要比较 Shape,而不是 Shape*

正如其他答案所指出的,boost::ptr_vector是实现这一目标的简单方法。

关于c++ - vector 迭代器不可解引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/301959/

相关文章:

c++ - Xcode - 包太大

c++ - 手动设置 Visual Studio 2012 的 C++ 语言版本

c++ - 如何在 C++ 中正确转换结构

C++:STL multimap.equal_range()

c++ - 如何在 C++ 中获取多维 vector 的维度

c++ - 如何修复 "error: ‘_1’ 未在此范围内声明”?

c++ - Arduino循环/设置问题

c++ - C++ 和共享库中的代码执行点

c++ - 字符串没有针对字符串文字进行足够优化

c++ - 为什么 long 和 long long 的最大值产生相同的输出?