摘要: 静态代码扫描,借用一段网上的原文解释一下(这里叫静态检查):“静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。代码检查代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面;可以发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。”。我看了一系列的静态代码扫描或者叫静态代码分析工具后,总结对工具的 阅读全文
posted @ 2011-09-08 23:54 Nasser 阅读(2794) 评论(1) 推荐(0) 编辑
摘要: 流是一种强大的数据处理抽象机制,它允许你调用泛型的读/写函数,不必关心数据从什么地方来、到什么地方去。使用流,同样的代码可从控制台、文件、套接字等地方读取数据。STL通常不是线程安全的,本文提出了如何在线程安全的方式下使用流的方案。C++将流的强大能力与运算符重载合并到一起,为我们提供了>>和<<运算符,以便从流中读取,以及向流中写入,如清单A所示。向流中写入通常不是“线程安全”(thread-safe)的。事实上,即便是fread和fwrite这样的基元函数,也不要求是线程安全的。不过,使用正确实现的标准模板库(STL)流,不仅能继续发挥流简单易用的特点,还能保证代码 阅读全文
posted @ 2011-05-05 13:25 Nasser 阅读(1805) 评论(1) 推荐(0) 编辑
摘要: 本文说明了vector 容器使用时应该注意的内存分配问题,原理说的比较详细,对于初学者比较适用。 本文描述的是一种很常见的情况:当你在某个缓存中存储数据时,常常需要在运行时调整该缓存的大小,以便能容纳更多的数据。本文将讨论如何使用 STL 的 vector 进行内存的再分配。 这里描述的是一种很常见的情况:当你在某个缓存中存储数据时,常常需要在运行时调整该缓存的大小,以便能容纳更多的数据。传统的内存再分配技术非常繁琐,而且容易出错:在 C 语言中,一般都是每次在需要扩充缓存的时候调用 realloc()。在 C++ 中情况更糟,你甚至无法在函数中为 new 操作分配的数组重新申请内存。你不仅要 阅读全文
posted @ 2011-05-03 21:00 Nasser 阅读(3393) 评论(0) 推荐(1) 编辑
摘要: 摘要:本文列出几个基本的STL map和STL set的问题,通过解答这些问题讲解了STL关联容器内部的数据结构,最后提出了关于UNIX/LINUX自带平衡二叉树库函数和map, set选择问题,并分析了map, set的优势之处。对于希望深入学习STL和希望了解STL map等关联容器底层数据结构的朋友来说,有一定的参考价值。STL map和set的使用虽不复杂,但也有一些不易理解的地方,如:为何map和set的插入删除效率比用其他序列容器高?为何每次insert之后,以前保存的iterator不会失效?为何map和set不能像vector一样有个reserve函数来预分配数据?当数据元素增 阅读全文
posted @ 2011-05-02 23:03 Nasser 阅读(807) 评论(0) 推荐(0) 编辑
摘要: 介绍这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用。通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了。Vector总览vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在 阅读全文
posted @ 2011-04-30 12:10 Nasser 阅读(761) 评论(0) 推荐(0) 编辑
摘要: 本文档深入分析了std::deque,并提供了一个指导思想:当考虑到内存分配和执行性能的时候,使用std::deque要比std::vector好。介绍本文深入地研究了std::deque 容器。本文将讨论在一些情况下使用deque 比vector更好。读完这篇文章后读者应该能够理解在容量增长的过程中deque 与vector在内存分配和性能的不同表现。由于deque 和vector的用法很相似,读者可以参考vector 的文档中介绍如何使用STL容器。Deque总览deque 和vector一样都是标准模板库中的内容,deque 是双端队列,在接口上和vector 非常相似,在许多操作的地方 阅读全文
posted @ 2011-04-29 12:40 Nasser 阅读(666) 评论(4) 推荐(1) 编辑
摘要: 0 前言: string 的角色 C++ 语言是个十分优秀的语言,但优秀并不表示完美。还是有许多人不愿意使用C或者C++,为什么?原因众多,其中之一就是C/C++的文本处理功能太麻烦,用起来很不方便。以前没有接触过其他语言时,每当别人这么说,我总是不屑一顾,认为他们根本就没有领会C++的精华,或者不太懂C++,现在我接触perl, php, 和Shell脚本以后,开始理解了以前为什么有人说C++文本处理不方便了。举例来说,如果文本格式是:用户名 电话号码,文件名name.txt Tom 23245332Jenny 22231231Heny 22183942Tom 23245332...现在我们 阅读全文
posted @ 2011-04-28 22:05 Nasser 阅读(419) 评论(0) 推荐(1) 编辑
摘要: 一、STL简介STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件 阅读全文
posted @ 2011-04-28 21:52 Nasser 阅读(339) 评论(0) 推荐(0) 编辑
摘要: STL概述STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。要点STL算法作为模板函数提供。为了和其他组件相区别,在本书中STL算法以后接一对圆括弧的方式表示,例如sort()。STL另一个重要特性是它不是面向对象的。为了具有足够通用性,STL主要依赖于模板而不是封装,继承和虚函数(多态性)——OOP的三个要素。你在STL中找不到任何明显的类继承关系。这好像是一种倒退,但这正好是使得STL的组件具有广泛通用性的底层特征。另外,由于STL是 阅读全文
posted @ 2011-04-27 23:08 Nasser 阅读(394) 评论(0) 推荐(2) 编辑
摘要: 介绍这是一篇指导您如何在Microsoft Visual Studio下学习STL并进行实践的文章。这篇文章从STL的基础知识讲起,循序渐进,逐步深入,涉及到了STL编写代码的方法、STL代码的编译和调试、命名空间(namespace)、STL中的ANSI / ISO字符串、各种不同类型的容器(container)、模板(template)、游标(Iterator)、算法(Algorithms)、分配器(Allocator)、容器的嵌套等方面的问题,作者在这篇文章中对读者提出了一些建议,并指出了使用STL时应该注意的问题。这篇文章覆盖面广,视角全面。不仅仅适合初学者学习STL,更是广大读者使用 阅读全文
posted @ 2011-04-27 20:18 Nasser 阅读(279) 评论(0) 推荐(1) 编辑