假设我有一个空列表L.目前如果我运行L.front(),它将快速执行返回垃圾值。是否有一些选项可以打开,执行此操作会抛出异常或导致断言失败?
由于
答案 0 :(得分:2)
使用empty()
检查列表是否为空。 size()
在这里并不好,因为它可能具有线性运行时。请参阅Effective STL中的详细信息。 empty()
具有恒定的运行时间,这是一种标准方式。
答案 1 :(得分:2)
答案 2 :(得分:1)
如果您使用的是Visual C ++ 2010(可能还有早期版本),则可以使用以下两个宏启用安全SCL和迭代器调试:
#define _SECURE_SCL 1
#define _HAS_ITERATOR_DEBUGGING 1
其他标准库也可能有这个。
编辑:正如所建议的那样,VC2010中有一个宏,即_ITERATOR_DEBUG_LEVEL
,其中有3个级别定义如下:
#if _HAS_ITERATOR_DEBUGGING
#define _ITERATOR_DEBUG_LEVEL 2
#elif _SECURE_SCL
#define _ITERATOR_DEBUG_LEVEL 1
#else
#define _ITERATOR_DEBUG_LEVEL 0
#endif
答案 3 :(得分:0)
某些标准库确实提供了这样的选项。您需要查阅特定实现/编译器的文档和/或代码,以确定其特性以及如何启用它。
或者,您可以使用像valgrind或Purify这样的内存检查器,而不是在库级别中执行它。