
C/C++/STL
wangwenwen
这个作者很懒,什么都没留下…
展开
-
小心使用STL中map的[]操作符
一个map就是一个(关键码(key),值(value))对偶的序列,它提供基于关键码的快速提取操作。也就是说,可以用下标运算符[]将关键码作为下标去执行查找,并返回对应的值。因此可以把map的使用方法想象成有特殊下标的数组。在很多时候用下标运算符[]来对map中的元素进行存取是非常方便和简单的;但是,如果map下标运算符[]运用不得当,也会造成意想不到的问题。 我们知道,C++是不检查下转载 2012-05-19 13:45:27 · 690 阅读 · 0 评论 -
【STL】 map、hash_map、迭代器
1. hash_map和map的区别在哪里?构造函数。hash_map需要hash函数,等于函数;map只需要比较函数(小于函数).存储结构。hash_map采用hash表存储,map一般采用红黑树(RB Tree)实现。因此其内存数据结构是不一样的。2. 什么时候需要用hash_map,什么时候需要用map?选用map还是hash_map,关键是看关键字查询操作次数,以及你所需要转载 2011-10-23 22:59:37 · 6927 阅读 · 0 评论 -
c++ map的使用方法
Map是c++的一个标准容器,它提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map构造函数;mapmapstring; mapmapint;mapmapstring; mapmapchar;mapmapchar; mapmapint; 2. map添加数据;map maplive; mapl转载 2012-05-03 23:31:58 · 827 阅读 · 0 评论 -
C语言中级
《c语言中级》知识点总结:1. sizeof关键字:编译时确定,sizeof(对象),sizeof(类型),sizeof对象,sizeof(指针)=4.int a[5]; sizeof(a) = 20; sizeof(&a) = 20;2. c语言不允许定义空结构体; c++允许, sizeof() = 13. char *原创 2014-02-18 22:28:36 · 2141 阅读 · 1 评论 -
C++语言中级
《c++语言中级》 知识点总结:1. 类型决定了:大小、行为、存储方式、编译器检查依据;每个变量都有name、type、address、value、reference;变量生存周期从短到长: 临时、栈区、全局静态、堆区;2. 对象在内存中的布局:对象------仅有数据成员(非静态)this;函数------代码区3. 重载:同一个作用域内的几个函数,函数名相同,形参表原创 2014-02-28 20:07:12 · 1713 阅读 · 0 评论 -
任何时候都适用的20个C++技巧
1. 在C++把构造函数声明为私有的有什么用?一般在什么情况下才需要把类的构造函数声明为私有的?如果使用单件模式,就要用到这个技巧。单件模式就是说整个程序中,这个类的对象有且只有一个。比如对于个人电脑,键盘就可以认为有且只有一个。将构造函数声明为私有,就不能随意的创建对象了,这样才能保证对象有且只有一个。***************************************转载 2011-10-15 17:28:02 · 821 阅读 · 0 评论 -
setjump 和 longjump
goto语句看起来是处理异常的更可行方案。不幸的是,goto是本地的:它只能跳到所在函数内部的标号上,而不能将控制权转移到所在程序的任意地点(当然,除非你的所有代码都在main体中)。为了解决这个限制,C函数库提供了setjmp()和longjmp()函数,它们分别承担非局部标号和goto作用。头文件申明了这些函数及同时所需的jmp_buf数据类型。原创 2014-08-09 14:00:09 · 6509 阅读 · 1 评论 -
C语言编码规范--->自己需要注意的项
头文件:1.每一个.c文件应有一个同名.h文件,用于声明需要对外公开的接口。2.禁止头文件循环依赖。3.头文件应当自包含(任意一个头文件均可独立编译)。4.禁止在extern"C"中包含头文件。5.禁止在头文件中定义变量,如果头文件被其他文件包含,会引发重复定义。6.只能通过包含头文件的方式使用其他.c提供的接口,原创 2014-11-10 20:25:53 · 4446 阅读 · 0 评论 -
STL算法
转载地址:http://www.cnblogs.com/kzloser/archive/2012/11/02/2751424.html转载 2014-11-20 15:34:48 · 561 阅读 · 0 评论 -
auto_ptr使用总结
(1) auto_ptr的意义auto_ptr是一种智能指针,当系统异常退出的时候避免资源泄漏(内存)。其他的资源还对应其他的智能指针。(2) auto_ptr的使用std::auto_ptr test(new int(1));test将是一个auto_ptr的对象,使用一个int指针进行初始化。test可以象其他指针一样使用,如使用* 使用->但是++不可以使用,转载 2014-11-24 15:14:13 · 1316 阅读 · 0 评论 -
STL中二分查找相关算法(binary_search, lower_bound, upper_bound, equal_range)
STL包含四种不同的二分查找算法,binary_search lower_bound upper_bound equal_range.他们作用的range是已sorted。 binary_search试图在已排序的[first, last)中寻找元素value。如果[first, last)内有等价于value的元素,它会返回true,否则返回false,它不返回查找位置。转载 2014-12-05 17:53:38 · 885 阅读 · 0 评论 -
effective STL 条款27 和 条款28
#include #include #include #include using namespace std;int main(){//条款27:用distance和advance把const_iterator转化成iterator typedef deque IntDeque; typedef IntDeque::iterator Iter; typedef IntD原创 2014-12-05 16:21:29 · 926 阅读 · 0 评论 -
《effective STL》读书笔记
转载地址:http://www.cnblogs.com/luxiaoxun/archive/2012/12/05/2803136.html#.string 建议 使用string 的方便性就不用再说了,这里要重点强调的是string的安全性。 string并不是万能的,如果你在一个大工程中需要频繁处理字符串,而且有可能是多线程,那么你一定要慎重(当然,在多线程下你使转载 2014-12-08 17:31:59 · 671 阅读 · 0 评论 -
bind1st bind2nd的使用
bind1st和bind2nd函数用于将一个二元算子(binary functor,bf)转换成一元算子(unary functor,uf)。为了达到这个目的,它们需要两个参数:要转换的bf和一个值(v)。 可能这么解释以后大家还不是很清楚,那么就说点白话吧。我们在做比较的时候所写的表达式像 x > k ,x x,k < x,也就是把k作为比较表达式的第一个参数。大家可能会注意到这里转载 2012-03-21 19:44:50 · 678 阅读 · 0 评论 -
stringstream进制转换与清空误区
一、清空误区清空stringstream,应该用 .str(""),用clear()是无效的,clear清空的是stream的状态(比如出错状态)二、进制转换#include #include #include int main(){ std::stringstream stream; std::string result; int原创 2015-07-19 20:09:24 · 2340 阅读 · 0 评论 -
vector使用swap释放内存
“vector 的 clear 不影响 capacity , 你应该 swap 一个空的 vector。”当vector、string大量插入数据后,即使删除了大量数据(或者全部都删除,即clear) 并没有改变容器的容量(capacity),所以仍然会占用着内存。 为了避免这种情况,我们应该想办法改变容器的容量使之尽可能小的符合当前 数据所需(shrink to fit)《E原创 2015-07-19 20:15:28 · 1833 阅读 · 0 评论 -
STL remove和erase
remove 算法描述:查找的得到第一个元素的位置,然后从此位置开始遍历容器,将后面的元素依次前移,跳过和value相同值的元素,也就是说,所有和value相同值的元素都会被覆盖,而其他的元素都会依次前移。最后remove返回"指向最后一个 '有用' 元素的iterator",但是在remove算法过程中,并没有修改原容器的size,以及end()。但是从逻辑角度看,最后的[ 从r转载 2012-05-20 00:02:17 · 19344 阅读 · 3 评论 -
条款33:提防在指针的容器上使用类似remove的算法
你在管理一堆动态分配的Widgets,每一个都可能通过检验,你把结果指针保存在一个vector中:class Widget{public: ... bool isCertified() const; // 这个Widget是否通过检验 ...};vector v; // 建立一个vector然后用... // 动态分配的Widgetv.push_b转载 2012-05-20 00:10:27 · 2623 阅读 · 0 评论 -
关键字:Const,Const函数,Const变量,函数后面的Const
[转]关键字:Const,Const函数,Const变量,函数后面的Const 看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受转载 2008-08-01 16:14:00 · 558 阅读 · 0 评论 -
结构体最后的长度为0或者1的数组
在Linux系统里,/usr/include/linux/if_pppox.h里面有这样一个结构:1struct pppoe_tag {2 __u16 tag_type;3 __u16 tag_len;4 char tag_data[0];5} __attribute ((packed));最后一个成员为可变长的数组,对于TLV(Type-Length转载 2012-02-04 21:09:56 · 804 阅读 · 0 评论 -
C语言中的位域的使用
一、位域 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用转载 2012-03-23 11:56:51 · 579 阅读 · 0 评论 -
标准C的标记化结构初始化语法
在标准C中(C89)结构标准初始化是用{}来实始化,在C99的版本,采用了采用可读性更强的标记化实始化,这在LINUX内核和驱动很为常见。这是ISO C99的用法C Primer Plus第五版中相关章节:已知一个结构,定义如下 struct book { char title[MAXTITL]; char author[MAXAUTL]; fl转载 2012-11-26 17:11:23 · 457 阅读 · 0 评论 -
sscanf %n 用法
#include "stdafx.h"int main(int argc, char* argv[]){ char *p = "audio 7078 RTP/AVP 112 111 110 3 0 8 101"; int portno; int len; if((sscanf(p, "audio %d RTP/AVP %n", &portno, &len) == 1)原创 2013-03-22 11:11:56 · 1623 阅读 · 0 评论 -
个人C++注意点(查漏补缺)
个人C++注意点(查漏补缺)(2008-10-25):1、A[0]它是一个表达式,而不是一个名字:(A+0)2、通过初始化列表赋初值:int a[2]={int(1),int(2)};3、前置声明只能用于引用和指针,不能用于对象4、构造函数天然具有类型转换功能,除非用explicit关闭5、指针的引用 int *p; int *&q=p; 但引用不能再有引用转载 2013-12-31 21:54:16 · 730 阅读 · 0 评论 -
好久没有用c++,转一个c++注意点
一 编程设计 1.将程序划分为多个子系统,包括子系统间的接口和依赖关系、子系统间的数据流、在各子系统间的来回输入输出、以及总的线程模型。 2.各个子系统的具体细节,包括进一步细分的类、类层次体系、数据结构、算法、特定的线程模型和错误处理。二 设计流程 1.需求:功能需求和性能需求。 2.设计步骤 (1)把程序划分为通用功能转载 2013-12-31 22:08:44 · 735 阅读 · 0 评论 -
C++指向类成员的指针的使用(详细介绍)
1.普通函数指针不能被赋值为成员函数的地址,即使返回类型和参数完全匹配。例如:下面是的pfi是一个普通函数指针,它没有参数,返回类型为int: int (*pfi)();若有两个全局函数,HeightIs()和WidthIs(): int HeightIs(); int WidthIs();则下面的的赋值操作是合法的: pfi = HeightIs(); pfi =转载 2014-01-03 13:37:20 · 1155 阅读 · 0 评论 -
STL中mem_fun和mem_fun_ref的用法
怎么对容器中的所有对象都进行同一个操作?我们可能首先想到的是用循环来实现。 比如有如下的一个类:class ClxECS{public: int DoSomething() { // 这里以输出一句话来代替具体的操作 cout "Output from method DoSomething!" endl;转载 2012-05-19 23:31:49 · 686 阅读 · 0 评论 -
stl中的仿函数functor的应用
在stl的泛型算法中,functor应用甚多。template struct plus { T operator ()(const T& x, const T& y) { return x + y; } }; template struct minus { T operator ()(const T& x, const T&转载 2012-03-21 19:33:50 · 916 阅读 · 0 评论 -
C++11新特性
候选变更C++的修订包含核心语言以及标准程序库。在发展新标准的每个机能上,委员会采取了几个方向:维持与C++98,可能的话还有C之间的稳定性与兼容性;尽可能不通过核心语言的扩展,而是通过标准程序库来引进新的特色;能够演进编程技术的变更优先;改进 C++ 以帮助系统以及库设计,而不是引进只针对特别应用的新特色;增进类型安全,提供对现行不安全的技术更安全的替代方案;增进直接对硬转载 2015-11-13 21:59:47 · 567 阅读 · 0 评论