
C++学习笔记
文章平均质量分 59
hitrose27
熟男
展开
-
fstream_chinese_output
使用C++标准库的iostream,可以方便地将控制台、文件、字符串以及其它可扩充的外部表示作为流来处理,但要处理中文,却会碰到很多问题。本人原来没怎么用过这个iostream,这几天尝试用这个写点东西,一会儿不能输出中文,一会儿不支持中文文件名的,搞得头大。网上搜了搜,没有发现适用于所有情况的解决方案。不过后来自己经过多次测试,基本解决了这些问题,现在写成文字作为一个总结,也供碰到同样问题的朋友转载 2010-01-22 10:11:00 · 748 阅读 · 0 评论 -
c正则--regex
最近忙的昏天暗地,有日子没有写博了,昨天搞定总算有了自己的时间,继续学习哈哈~~ 关于详细的c正则内容,man regex可以看到很多,只是在这里贴一下代码,并且说明一下需要注意的地方: 1、如果需要输出特殊字符,需要反转义2次2、查看各种状态是一个好习惯3、match[0]中是原始的数据,如果想要查找匹配到的结果,从match[1]开始 代码代码~~#incl原创 2011-06-29 18:16:00 · 906 阅读 · 0 评论 -
线程安全的单例模式
转载自:http://devbbs.doit.com.cn/thread-30213-1-1.html实际上使用什么样的单例实现取决于不同的生产环境,懒汉式也就是我在上面举得那个例子,这种方式适合于单线程程序,多线程情况下需要保护getInstance()方法,否则可能会产生多个Singleton对象的实例。在此基础上确保getInstance()方法一次只能被一个线程调用就需转载 2012-04-06 14:07:56 · 939 阅读 · 0 评论 -
pthread学习笔记(五)--跋涉之旅之Posix线程编程指南(3)
原文链接 互斥锁尽管在PosixThread中同样可以使用IPC的信号量机制来实现互斥锁mutex功能,但显然semphore的功能过于强大了,在PosixThread中定义了另外一套专门用于线程同步的mutex函数。 关于IPC的相关知识可以登录链接查看。IPC信号量的知识在文章IPC under Linux-Semaphore中有详细的说明链接。 1原创 2012-05-07 10:10:42 · 801 阅读 · 0 评论 -
C/C++宏
http://www.cnblogs.com/sevencat/archive/2004/06/10/14872.html一、标准预定义宏 The standard predefined macros are specified by the relevant language standards, so they are available with all compilers th转载 2012-04-23 10:00:23 · 1005 阅读 · 0 评论 -
linux 获取文件大小
摘自: http://os.51cto.com/art/200912/168700.html 在我们学习生活中经常会遇到问题和困难,就比如说我们在学习Linux时,比如怎样Linux获取文件大小的方法。前几天在工作中需要写一段代码,获取一些视频文件的大小,心想:这还不简单吗?直接用标准C的文件操作函数就OK了。于是写了下面的一段代码来实现:unsigned long get_fi转载 2011-08-10 13:15:59 · 671 阅读 · 0 评论 -
C++ 0X
摘自http://www.wuzesheng.com/?p=1972参考http://www.ibm.com/developerworks/cn/aix/library/au-gcc/1. auto用来声明变量大家先看看下面的代码,一个我们比较熟悉的C++98中遍历map的例子:std::map > mp;for (std::map >::iterator i转载 2012-07-03 11:38:31 · 2335 阅读 · 0 评论 -
支持C++0x的GCC安装
网上有很多教程,但是按照教程来做仍然出了问题。。。有些教程具有误导性:在GCC的configure时发现系统没有GMP和MPFR。就在GNU的官网上下了个GMP又在MPFR官网上下了个MPFR。其实完全不需要这么复杂,按照如下方法编译即可:获取gcc的最新版本 svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir获取原创 2012-07-04 12:36:39 · 1466 阅读 · 0 评论 -
如何写好while和for循环
这是编程语言的一个基本问题,其实要点无非三个:除非在刻意的情况下,避免死循环有效的循环保证循环的边界条件正确产生死循环的主要原因是continue、goto等跳转语句的存在,因为这些跳转可能恰巧跳过了更新循环条件的地方。也许有人认为这种问题是一个正常的码农不会犯这种错误,但是,在有些条件下,真的会发生。这些条件也可以简单的概括为以下两点:过长的循环体,在增加原创 2012-11-07 10:56:46 · 1277 阅读 · 0 评论 -
linux多线程条件下的计数
转载自http://soft.chinabyte.com/os/412/12200912.shtml最近编码需要实现多线程环境下的计数器操作,统计相关事件的次数。下面是一些学习心得和体会。不敢妄称原创,基本是学习笔记。遇到相关的引用,我会致谢。 当然我们知道,count++这种操作不是原子的。一个自加操作,本质是分成三步的: 1 从缓存取到寄存器 2 在寄存器转载 2012-11-19 09:31:40 · 943 阅读 · 0 评论 -
static的map成员的初始化顺序居然和编译器相关
我十分不敢相信这是真的,但是确实发生了,而且足足折腾了我5个小时。core文件的内容大概是这样:#0 0x0000003071664cba in std::_Rb_tree_decrement(std::_Rb_tree_node_base*) () from /usr/lib64/libstdc++.so.6(gdb) bt#0 0x0000003071664cba in s原创 2013-02-27 22:05:02 · 3587 阅读 · 6 评论 -
网络编程学习笔记(一)-----socket
<br />今天开始学习Linux的C++网络编程。<br /> <br />以前也用过一点socket,但是没有总结过,今天重新复习,然后总结之。<br /> <br />首先介绍一些数据类型:<br /> <br />sockaddr_in<br />sockaddr_un<br />sockaddr<br /> <br />struct sockaddr { __SOCKADDR_COMMON (sa_); /* Common data: address family and l原创 2011-05-21 16:12:00 · 811 阅读 · 0 评论 -
IBM的ZThread库
下载地址去除调试信息:在Debug.h中的最前端增加#define ZTDEBUG(x),忽略警告,DONE这个库用起来应该比Linux系统下提供的并发的借口要来的舒坦,不知道有没有TBB快速,但是可以肯定的是为程序员省掉了很多代码的编辑工作。Mark一下,认真学习之。当需要使用多线程库的时候,需要从Runnable共有继承产生一个类,然后重新定义run()函数代码如下:#include #include "zthread/Runnable.h"#include "zthread/Thread.h"原创 2011-03-15 17:05:00 · 3074 阅读 · 4 评论 -
Linux编译C文件
熟悉了Windows平台下编译一个C++工程后,你是否会提出这样一个问题:在Linux平台下又如何编译一个C++工程呢?<br /><br />希望本文能给正在学习或想学习Linux C++开发的你起到抛砖引玉的作用。<br /><br />首先,你必须有一个Linux开发环境,这样才能进行C++开发。笔者用的是安装在虚拟机中的Ubuntu9.04,Ubuntu操作系统是没带C++编译器g++。在连网的情况下,在终端中使用root超级用户权限输入以下命令:<br />sudo apt-g转载 2010-11-23 13:54:00 · 4112 阅读 · 0 评论 -
chapter7
作为函数,不能返回内置的数组;对于返回值的问题,可否建立一个返回值的命名空间域,每次调用命名空间域的内容作为返回,这样也可以避免全局变量;形参的初始化与变量的初始化一样:如果形参具有非引用类型,则复制实参的值,如果形参为引用类型,则它只是实参的别名。普通的非引用类型的参数通过复制对应的实参实现初始化。这个约定意味着不管什么函数调用了参数,但是该参数(非引用的类型)在函数运行结束的时候其值并原创 2009-12-11 19:44:00 · 633 阅读 · 0 评论 -
chapter8IO
getline 函数,需要分别取 istream 类型和 string 类型的两个引用形参,其功能是从 istream 对象读取一个单词,然后写入 string 对象中。出于某些原因,标准库类型不允许做复制或赋值操作。1、只有支持复制的元素类型可以存储在 vector 或其他容器类型里。由于流对象不能复制,因此不能存储在vector(或其他)容器中(即不存在存储流对象的 vector 或其他容原创 2009-12-11 19:44:00 · 562 阅读 · 0 评论 -
Chapter3For4th
从标准输入读取 string 并将读入的串存储在 s 中。string 类型的输入操作符:Reads and discards any leading whitespace (e.g., spaces, newlines, tabs)读取并忽略开头所有的空白字符(如空格,换行符,制表符)。It then reads characters until the next whitespac原创 2009-12-11 19:38:00 · 525 阅读 · 0 评论 -
关于Typedef
1、 typedef 修饰简单的数据类型 例如:int,float,double,string,vector可以理解为只是换了一个=====别名========2、 typedef修饰指针或者数组 例如:typedef char line[81]; line test;//则test是一个81维的数组 另外一个要着重强调的就是typedef定义的指针,无论const在定义的名字的前原创 2009-12-11 19:46:00 · 580 阅读 · 0 评论 -
chapter4ArrayPointFor4th
如果可能的话,除非所指向的对象已经存在,否则不要先定义指针,这样可避免定义一个未初始化的指针。指针的算术操作只有在原指针和计算出来的新指针都指向同一个数组的元素,或指向该数组存储空间的下一单元时才是合法的。 const size_t arr_sz = 5; int int_arr[arr_sz] = { 0, 1, 2, 3, 4 };原创 2009-12-11 19:40:00 · 513 阅读 · 0 评论 -
chapter5
关于左值和右值:左值可以出现在赋值表达式的左边或者右边,可以被赋值,但是右值只能出现在赋值表达式的右边,不能被赋值;逻辑表达式:对于||以及&&这两个表达式,要注意的就是只有当第一个表达式不能确定整个表达式的值的时候才会计算第二个表达式的值;逻辑与和逻辑或操作符总是先计算其左操作数,然后再计算其右操作数。只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数。我们常常称这种求值原创 2009-12-11 19:42:00 · 485 阅读 · 0 评论 -
chapter6
使用空语句时应该加上注释,以便任何读这段代码的人都知道该语句是有意省略的。无关的空语句并非总是无害的,在 while 或 if 条件后面额外添加分号,往往会彻底改变程序员的意图。如果实在懒,可以用逗号表达式取代块语句,但是这样会使代码的可读性极度下降!原创 2009-12-11 19:43:00 · 383 阅读 · 0 评论 -
chapter9顺序容器
为了使程序更清晰、简短,容器类型最常用的构造函数是默认构造函数。在大多数的程序中,使用默认构造函数能达到最佳运行时性能,并且使容器更容易使用。将一个容器复制给另一个容器时,类型必须匹配:容器类型和元素类型都必须相同。C++ 语言中,大多数类型都可用作容器的元素类型。容器元素类型必须满足以下两个约束:元素类型必须支持赋值运算。元素类型的对象必须可以复制。除了引用类型外,所有内置或复合类型都可原创 2009-12-18 21:34:00 · 679 阅读 · 0 评论 -
error LNK2001
<br /><br />在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有: <br />libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main <br />LIBCD.lib(wincrt0.obj) : error LNK2001转载 2010-10-19 14:14:00 · 759 阅读 · 0 评论 -
TBB使用心得
<br />如果是多核处理器,使用TBB能够有效地提升函数的执行速度,但是如果韩式内部牵扯到了读取硬盘数据的时候,这个速度会大打折扣,甚至比直接调用函数还要低……分析其中的原因,个人认为是硬盘读取速度成为了实现速度的瓶颈,再加上分配任务的开销,必然造成速度的降低。<br /> <br />因此对于需要读取硬盘的函数,使用TBB优化应该仅限于把数据读取到内存之后再进行优化。<br /> <br />这个想法待验证。原创 2010-12-26 16:59:00 · 1802 阅读 · 0 评论 -
pragma
常用参数<br />#pragmamessage 参数<br /> Message 参数能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #Pragma message(“消息文本”) 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定转载 2010-12-27 09:13:00 · 659 阅读 · 0 评论 -
__x_a != __x_a什么时候不成立?
#define isnan(x) \ __extension__({ __typeof (x) __x_a = (x); \原创 2014-01-06 16:31:13 · 1214 阅读 · 0 评论