C++ STL操作陷阱:删除map并避坑

需积分: 9 6 下载量 179 浏览量 更新于2024-07-13 收藏 500KB PPT 举报
本文档主要介绍了在C++ STL标准库操作中可能遇到的一些陷阱和需要注意的事项。首先,关于条件删除map表的部分,作者给出了一个示例代码片段,展示了如何使用`std::list<int>`容器中的迭代器`iter`来删除大于10的元素。使用`eraser()`方法,当找到满足条件的元素时,迭代器会被递增并移除对应的元素。 1. **局部变量和全局变量重名问题**: 当局部变量和全局变量同名时,C++编译器会优先使用局部变量。在函数内部引用该名称时,会使用局部变量而不是全局变量。如代码所示,`intval`在两个函数中的行为不同,强调了使用`::`前缀来明确访问全局变量的重要性。 2. **运算符优先级**: 面试题中常常涉及运算符优先级的问题,例如`i+++j`的解析。实际上,自增运算符`++`在表达式中具有较高的优先级,所以`k`会被设置为`(i++) + j`。面试者可能会被要求分析这类操作的执行效率,但在实际开发中,这类细节通常不需过多关注。 3. **宏定义**: 宏定义是C/C++中的一种预处理器指令,用于文本替换。然而,宏定义容易出错,需要注意以下几点: - 宏定义格式必须正确,无分号,且首字母大写,如`#define PPPP123`是错误的。 - 括号匹配也很关键,如`#define SQR(x)(x*x)`,括号应该正确嵌套以确保函数调用的正确性。 - 宏定义的使用场景,如计算一年的秒数或求最大值,可以通过宏进行简化,但应避免过于复杂的逻辑,如`((a+b)+abs(a-b))/2`,更推荐直接使用比较运算符。 这篇文章旨在帮助读者理解在C++ STL操作中避免常见陷阱,掌握正确的命名规则、运算符优先级处理以及安全地使用宏定义。在面试时,对这些问题的熟悉度有助于展示编程基础扎实和严谨的编程习惯。