[C++ STL高效应用与最佳实践指南]
C++ STL不是玩具,是武器。你得把它当真家伙使,否则它就会反过来耍你。模板泛型、迭代器、算法、容器,这四个东西,缺一不可。别想着用vector乱塞数据,用map随便查表,用algorithm瞎调函数。用不好,STL就成了你代码里的地雷。 容器选对,事半功倍。vector不是万能的,list也不是废物。你要频繁插入删除?别用vector。你要随机访问?别用list。deque?它不是vector的替身,是另一种存在。set、map、unordered_map、unordered_set,这些关联容器各有脾性。搞不清底层结构,就别碰红黑树和哈希。 算法不是魔法。你不能背下所有函数名就觉得自己牛逼。你要懂它们的复杂度,你要知道它们怎么跑的。sort、stable_sort、partial_sort,三者之间差的不只是名字。find、binary_search、count,用错一个,性能崩盘。 迭代器是桥梁,不是装饰品。别拿它当指针用,它比指针复杂得多。前向、双向、随机访问,这些类型决定了你能走多远。别用失效的迭代器,别越界访问,别在修改容器时保留旧迭代器。 内存管理是底线。allocator不是你忽略的理由。别让容器自动扩容把你代码拖垮。reserve、shrink_to_fit,这些函数是你控制内存的钥匙。别等到内存爆了才想起优化。 异常安全不是可选项。STL大多数操作不抛异常不代表你代码不会崩。别在构造函数里抛异常,别在析构函数里做释放失败的操作。RAII是你的朋友,不是你的救世主。 泛型编程不是炫技。别为了写模板而写模板。traits、policy、concept,这些不是随便堆上去的。写一个通用算法之前,先问自己:它真的通用吗?还是你懒得写两个版本。 调试STL代码不是靠打印。你要会用gdb看vector内部结构,你要能读得懂map的节点树。别用cout (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |