为什么判断 std::vector 是否为空时,用 if(0==vec.size()) 提示效率低,但用 if (vec.empty()) 正常?修改 编译器错误:Possible inefficient checking for 'vecAttrValue' emptiness 修改 举报 添加评论 分享 • 邀请回答 默认排序 按时间排序 7 个回答 5赞同 反对,不会显示你的姓名 pezy C++ Programmer 5 人赞同 这要看编译器的具体实现。以下就gcc为例: 对于 std::vector来说, 其实 效率没区别. 但对于std::list来说(gcc 4.6-), empty()的效率是O(1), size()的效率是O(n). 所以更好的习惯, 应该是在这种情况下, 统一使用empty(). C++11对size()的效率做了一致性的规定。所以在gcc 4.7+, std::list的复杂度也是O(1)了。原因是增加了一个“size”的变量来存长度。 参考: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49561 编辑于 2014-09-12 8 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 申请转载 4赞同 反对,不会显示你的姓名 周星星 答题当『言简意赅』以节约读者时间 4 人赞同 问你火车来了没来,你瞄一眼就够了; 问你火车来了几节车厢,你得看仔细了,车头的GPS坐标,车尾的GPS坐标,差值再除以车厢长度。 发布于 2014-09-12 添加评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利 16赞同 反对,不会显示你的姓名 白如冰 16 人赞同 size()是end()-begin(). empty()是判断begin()==end().