
C/C++
C小虫
这个作者很懒,什么都没留下…
展开
-
C/C++输入输出
1.scanf和printf的优缺点A。缺点(1)对于不同类型的使用繁琐、不统一(2)不能够指定大小,存在缓冲区溢出风险(3)不可扩展,不容易针对用户自定义类型设计printf的类型缩写B。优点(1)打印多个值相当于一次函数调用,具备线程安全性。(2)容易控制格式2.iostream的优缺点A。缺点(1)格式化输出繁琐,且格式不具备外部可配置性原创 2016-08-11 17:53:30 · 386 阅读 · 0 评论 -
C++11学习9---移动构造函数
主要讲的是如何实现移动构造。1.移动构造的原因这个移动构造,或者移动拷贝赋值,有窃取资源的意思。这个窃取资源时对于指针持有的资源来说的。而这个窃取是通过在构造函数与重载拷贝赋值的时候,编码将当前的指针指向资源,再将原来的指针,指向nullptr实现的。当然,你也可以不对指针这样使用,比如对于任意的类型,将其拷贝给现在的,再将原来的置为空值。但是这样没有意义,因为相对于很大的原创 2016-04-01 16:48:39 · 2360 阅读 · 0 评论 -
C++标准库容器与迭代器
这篇文章就介绍一些基本知识。介绍操作的时候介绍贴合的操作,比如顺序容器只在尾部操作,不考虑对中间元素的低效操作。1.迭代器---C++Primer 3.4P96允许的操作①指向*iter iter->mem②移动++iter--iter③比较iter1 == iter2iter1 != iter2注意:比较操作,只有少数迭代器支持这种关系原创 2016-04-01 11:27:48 · 519 阅读 · 0 评论 -
C++算法标准库常用算法
1.算法①找到某个值,或者某个谓词判断findfind_if②计数某个值,或者某个谓词判断countcount_if③查找子序列search④查找最值min_element2.随机数①引擎②分布例程#include #include using namespace std;int main(){ defa原创 2016-03-31 16:38:26 · 2291 阅读 · 0 评论 -
《C++ Primer 5th》读书笔记6---再谈初始化
针对于C++11的《C++ Primer 5th》相对于上一本书进行了比较大的修改,在整体内容的架构上确实更加合理。但是对于拷贝初始化和直接初始化的介绍上并不如4th那么清楚。P441,5th的叙述:当使用直接初始化时,我们实际上是要求编译器使用普通的函数匹配来选择与我们提供的参数最匹配的构造函数。当我们使用拷贝初始化时,我们要求编译器将右侧运算对象拷贝到正在创建的对象中,原创 2015-11-30 15:37:58 · 453 阅读 · 0 评论 -
《C++Primer 5th》 读书笔记2--const
一、const初探这里主要讲三类:普通对象、引用、指针。1.普通对象①const修饰的对象必须初始化。②不能改变其值。③只要不改变对象的值,const对象和非const对象没有区别。④const与对象类型修饰符可以调换位置,即const int 和int const等价。2.引用:(绑定的对象的类型) &引用名,比如 int &x类型名是说将引用绑定原创 2015-08-06 14:57:17 · 603 阅读 · 0 评论 -
int的各种移植性变种
经常遇到size_t,ssize_t,sizt_type,socklen_t,unsigned int等等表达,搞地非常糊涂。在查看了一些资料有1.《深入理解计算机系统》 10.3节2.http://jeremybai.github.io/blog/2014/09/10/size-t/总结如下(1)上面的内容有ssize_t与socklen_t表示有符号的,其他都表示无符号的。原创 2016-03-06 10:21:17 · 658 阅读 · 0 评论 -
C++未经初始化
不管是类中的成员还是普通变量或者对象的情况。不过这里讨论的都是局部变量,不是全局变量。1.内置类型不管是int 还是 指针类型没有初始化的时候都是不确定的值,能够访问这个值,但是这个值是不确定的。2.指针指向如果一个指针没有初始化,那么指向这个指针将直接使程序崩溃。当然你如果动态分配一个变量,返回那个指针,没有初始化。应该属于情况1,访问那个指针指向的对象是得到一个不确原创 2016-03-05 21:14:52 · 767 阅读 · 0 评论 -
参数控制---getopt_long函数
这是一个用于处理从命令行输入命令的函数。加入我们编写了一个terminal函数,想要赋予它一些参数调用函数的功能。简单的比如server,client函数输入端口号这样的,直接使用系统的argc以及argv即可。但是复杂的输入就可以借助这个函数了。这个函数是getopt.h这个库下面的,而这个库又是unistd.h下面的。unistd的uni就是Unix的意思,它是一个原创 2015-09-19 10:49:10 · 374 阅读 · 0 评论 -
C++11学习笔记8---错误处理
异常处理的主要难题就是1.异常是传递还是处理2.异常发生时,如何确保资源被正确释放常见的防御式编程技巧原创 2015-11-30 19:56:27 · 580 阅读 · 0 评论 -
C++11学习笔记1---序
在阅读《C++并发编程实战》还有一些代码的时候,发现好多C++11的特性都不是很了解。其实并不是想详细记录语言细节,只是想弄清楚每个特性能干什么,有哪些常用的场景。本帖作为序,就按照网上看的一些重要特性,一个一个来记录想要看的内容吧。1.右值引用与move构造函数2.auto&decltype3.lambda表达式4.智能指针5.std::function6原创 2015-10-27 18:22:38 · 345 阅读 · 0 评论 -
面试注意
1.socket①如何不断提高并发量②怎么编写线程安全的容器③如何编写线程池2.服务端OOM①怎样防止内存溢出②怎样探测定位内存溢出③探测到了怎么解决3.数据结构与算法①图的遍历②二分查找③STL容器的各种实现方法原创 2016-03-10 14:35:58 · 354 阅读 · 0 评论 -
运算符重载
这里简单说一下运算符重载需要注意的问题1.本质与形式①本质它就是一个函数,所以应该有该有的返回类型,函数名,参数。②形式返回类型 operatorXXX(参数列表)注意:因为3目运算符? :不允许重载,所以一般的运算符重载最多两个参数。第一个参数绑定到运算符左边,第二个参数绑定到运算符右边2.成员函数与非成员函数(1)成员函数这个时候,默原创 2016-03-10 15:19:50 · 336 阅读 · 0 评论 -
用C++实现单例模式
1.C++11借助std::call_once和std::once_flag#includetemplateclass Singleton{public:Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;static T& instance原创 2016-08-28 11:25:10 · 662 阅读 · 0 评论 -
C语言拾遗
对一些C语言的知识进行总结,重点是最后关于字符数组、字符指针、字符串的讨论。1.变量的初始化简单说就是,静态变量初始化为0,自动变量不初始化。什么是不初始化呢?就是说,可能是任意值。注意:(1)对于非指针变量,当你声明了一个变量时,你就获得了掌控权,系统保证了除非你自己实现,否则这个变量不会用作它用。所以虽然这个变量里面的值是任意的,但是你可以随意修改这个值而不会有其他影响原创 2016-06-21 10:21:12 · 345 阅读 · 0 评论 -
STL中的Allocator
最近在看STL,写一点博客。关于一些细节可能就不放上来了,就写一些我自己的心得。1.为什么要用AllocatorC++容器的设计思路是,对存放到里面的东西是拷贝一份放进去。而且里面的空间都是动态分配的。所以在构建容器的时候,需要必要的①内存分配②构造对象。2.new operator、operator new、placement new原创 2016-06-13 15:32:44 · 1287 阅读 · 0 评论 -
C++中的trivial、standard layout、POD
在学习STL的时候,会反复出现trivial和POD这样的术语,这几个概念如果要特别仔细地区分,只能说是蛋疼。但是结合其在STL里面的用意,为了性能优化,不那么学究地去考究其意义还是相对好理解的。trivial是从其拷贝控制函数是否是系统合成的来说明的standard layout是从其内部布局是否类似于C中的struct来说明的POD(Plain Old Data)这里的Old就原创 2016-06-29 11:39:27 · 1641 阅读 · 0 评论 -
STL中的Vector
看了一下vector的实现,感觉C++的内存管理,确实是需要非常认真对待的。为了追求效率,自身就需要仔细万分,总结了3,4点感觉尤其如此。1.vector的底层实现这个倒是很简单,vector就是一段动态分配内存的数组,加上冗余空间,所以用三个指针(迭代器)就能表示出来,底层的数据结构。分别是迭代器:start、finish、end_of_storage其中,finish-st原创 2016-06-27 23:59:57 · 328 阅读 · 0 评论 -
STL中的Iterator
话不多说,就是总结几个问题1.什么是迭代器(1)迭代器可以看做一种智能指针,他会重载*和->运算符。(2)但是它并不一定具备指针的所有运算符:p++,p--,p+n,p-n,p[n],p1-p2,p1有可能它只提供一部分,比如:p++,p--,p1!=p2(3)STL强数据容器与算法分开,而迭代器又作为胶着剂将其撮合在一起。2.为什么每一种容器都要开发其专属迭代器(1)原创 2016-06-19 21:30:05 · 1138 阅读 · 0 评论 -
C++学习之多态的实现
多态又分为静态多态和动态多态。静态多态其实就是函数重载,动态多态就是一般我们所说的多态。多态作为面向对象的三大特征之一,需要另外两大特征:封装、继承的支持。本文主要讲讲,我看了一点《深度探索C++模型》总结多态是怎样实现的。1.C++内存布局C++对象主要可以有如下几种成员:(1)数据成员①static数据成员②nonstatic数据成员(2)函数成员①st原创 2016-05-30 22:56:00 · 625 阅读 · 0 评论 -
C++与Java的输入问题
在做OJ的题的时候,经常要进行测试用例的输入操作,由于这方面,还不是很熟练,梳理与总结一下。1.C++ 输入(1)输入以空格隔开,统计若干个(2)输入以行分隔原创 2016-03-29 09:35:39 · 350 阅读 · 0 评论 -
三种内存问题与三种指针
1.内存(1)内存泄露Memory Leak即动态申请的内存没有返还给系统。(2)内存溢出Out Of Memory OOM即无法向系统申请到想要的内存。内存如果不断泄露,最终会导致内存溢出。(3)内存越界Heap Corruption访问超过申请内存的区域。2.指针(1)野指针Wild Pointer未经初始化的指针,一般的指针没有原创 2016-03-15 17:12:19 · 416 阅读 · 0 评论 -
腾讯实习生面试总结
还有很多不足啊。①TCP的那些断开那些要详细的弄清楚。记清楚。②STL库的常用操作的比较。③vim的打开隐藏文件操作。④算法面试想不起也说一下想法。原创 2016-03-23 17:14:29 · 355 阅读 · 0 评论 -
《C++Primer 5th》 读书笔记1---内存与初始化
程序的三种内存:①静态内存 ②栈内存 ③堆①静态内存:局部static对象、类static成员、全局变量②栈内存:局部变量(定义在函数内的非static对象)③堆:动态分配的对象(程序运行时分配的对象)原创 2015-02-28 11:28:00 · 582 阅读 · 0 评论 -
C++11学习笔记4---lambda表达式
当向一个函数传递一个lambda时,同时定义了一个新类型和该类型的一个对象。传递的参数就是此编译器生成的类类型的未命名对象。1.为什么要使用lambda表达式?有一些泛型算法,比如里面的sort(),对于一定对象的比较需要用一个谓词或者可调用对象重载比较操作。这个时候可以使用lambda表达式作为参数。很方便。lambda就是一个匿名函数,在一些需要却又不想要为原创 2015-10-28 18:57:27 · 384 阅读 · 0 评论 -
《C++ Primer 5th》读书笔记3---关于类的构造函数
参考文献为《C++ Primer 5th》1.默认构造函数(P236)默认构造函数:类通过一个特殊的构造函数来控制默认初始化过程,这个函数叫做默认构造函数。默认构造函数无须任何实参。合成默认构造函数:编译器在发现类中不包含任何构造函数的情况下才会替我们生成一个默认构造函数。所以在我们定义了构造函数的时候,如果需要有默认的构造方式,就必须手动定义默认构造函数。原创 2015-10-19 18:39:58 · 419 阅读 · 0 评论 -
C++ Primer 第八章 标准IO库
转载自:http://www.cnblogs.com/kingcat/archive/2012/05/09/2491847.html学习本章内容之前有必要对缓冲区的概念做一个基本了解,我引用了网上一片文章《C++编程对缓冲区的理解》,内容如下: 什么是缓冲区 缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储转载 2015-02-26 15:50:25 · 547 阅读 · 1 评论 -
对于I/O流的理解
学习C++Primer第5版的IO流感觉很困惑。后来结合书上的讲解想了想,谈谈自己的理解吧。输入输出流就表示一连串的输入输出数据。可以把这一连串的数据看做是一个对象,所以可以用一个对象表示输入/输出流。cin cout cerr clog就是4个用于表示普通流的对象。特别地,cin是表示来自键盘的输入流的对象,cout表示向控制台窗口(屏幕)的输出流对象。(书上并不是如我这样说的,原创 2015-02-26 18:57:33 · 660 阅读 · 0 评论 -
德州扑克程序思路
对于服务器负责一个桌子的线程可以如下建模:1个荷官类用于公布底牌,公共牌,判定输赢,宣布彩池归属1个类用于和客户端传送消息1个桌子类,来表示桌上的玩家,可以建模为一个环形链表,链表中的 每一个元素代表1个玩家1个玩家类,表示玩家的信息,包括昵称,筹码,行动,手牌,座位号等原创 2015-11-05 09:03:54 · 2342 阅读 · 0 评论 -
struct内存安排
处理器:AMD x64操作系统:win7编译器:GCC 4.8.1该条件下,char---1byte int---4bytes double---8bytes本内容为我试验得到,所以会因为不同的试验平台等,还有试验设想的条件不全而出现结果会有偏差。结论:不考虑位域(位域就是可以以bit为单位精确指定位数)情况,struct里面的内存安排,会根据里面的最大基原创 2015-10-26 10:06:27 · 433 阅读 · 0 评论 -
C++11学习笔记3---auto&decltype
其实不去探讨细节的话,这两个的内容蛮少的。C++11中处理类型一般使用3种方式。(1)类型别名方式①使用typedeftypedef double wages;typedef int socket;方式②使用别名声明usingusing SI = Sales_item; (2)auto有时我们使用各种类作用域以及模板,造成类型名特别长,或者有时根本不知道原创 2015-10-28 11:11:51 · 322 阅读 · 0 评论 -
C++11学习笔记2---右值引用与移动构造函数
1.引入原因(1)拷贝构造函数为什么使用常量引用因为在函数的实参与形参的传递之中,对于很大的对象,如果使用值传递会耗费大量时间与资源。如果只是传递引用就会好很多。所以使用引用。我们不希望通过这个引用去改变参数原来的值,所以使用常量引用(const &)。但是有时我们有希望,还是需要定义创建与传入的参数相同却又是独立的存储空间的对象。这个时候我们可以在拷贝构造函数里面原创 2015-10-28 10:35:54 · 1236 阅读 · 0 评论 -
C++11学习笔记6---std::function
1.C++有哪些可调用对象①函数②函数指针③lamdba表达式(CP5 P346)④bind创建的对象(CP5 P354)⑤重载了函数调用运算符的类(CP5 P506)2.为什么要使用std::function过程是一系列操作的抽象,有时我们需要对过程进一步抽象。当5种对象具有相同的调用形式与返回类型时,我们希望对于C++的5种可调用对象不加区别地使用。原创 2015-10-29 11:11:04 · 460 阅读 · 0 评论 -
C++11学习笔记5---智能指针
1.为什么要使用动态内存①程序不知道自己需要使用多少对象(比如容器)②程序不知道所需对象的准确类型(比如不知道是基类还是其派生类)③程序需要在多个对象间共享数据(比如C++ Primer 5th p404的Blob类)2.为什么要使用智能指针来管理内存老的方式:new+delete会忘记释放造成泄露,或者过早释放造成空悬指针。新的方式:shared_ptr+make原创 2015-10-29 10:20:08 · 651 阅读 · 0 评论 -
C++11学习笔记7---资源回收RAII
资源回收包括:内存、线程、文件描述符等等内存---shared_ptr其他资源---RAII原则编程原创 2015-11-30 19:54:24 · 954 阅读 · 0 评论 -
自己指定的学习路线
目前迷恋的语言就是C++和Scheme/Racket,所以路线主要分成3个,这两种语言再加上一个算法与数据结构方面的。打钩表示我正在看的。1.C++主要通过以下4本书①C++ Primer ,5th②The C++ Standard Library ,2nd ✔③Inside The C++ Object Model④The Design and Evolu原创 2015-12-21 13:50:04 · 410 阅读 · 0 评论 -
一些编程小细节
1.一般的语句换行可以直接回车,字符串立即数如果要换行需要加一个\。2.codeblocks中复制当前行Ctrl+d。原创 2015-08-19 20:39:12 · 469 阅读 · 0 评论 -
char* c和char c[]的区别
看了网上的一些文章,比如: http://www.cnblogs.com/kaituorensheng/archive/2012/10/23/2736069.html其实总结起来就是一句话,char *就是一个指针,char c[]是一个数组,但是c可以有些指针的用法。1.char *char * c中,c是一个字符指针,它可以拥有栈内存,也可以拥有静态内存。具体看它指向的原创 2015-11-24 10:32:03 · 1587 阅读 · 0 评论 -
《C++ Primer 5th》读书笔记4---文本查询程序
这是本书第12章也是第二部分的最终一个例程,完成的任务是:利用标准库,读入一篇文章,然后实现对于任意单词的查询功能。我先总结一些注意细节或者中间遇到的问题,最后做完习题以后再整个总结。1.编译时注意事项我才用的是codeblocks作为IDE,然后使用Document_Query.h作为类申明,Document_Query.cpp作为类实现,然后用main来验证。每次重新用ID原创 2015-11-23 08:49:51 · 279 阅读 · 0 评论 -
《深入理解计算机系统》读书笔记8--- 并发编程2
接下来的内容主要就是线程的安全性问题,分别为线程同步错误,死锁和竞争。参考了文章:http://www.cnblogs.com/Jessy/p/3540724.html(1)同步错误不同的线程对于共享变量的同时操作,使得最终结果出错。一个简单的栗子,计数。各个线程每完成一个任务,就对完成任务数+1.到某一时刻,完成任务数累积到了5,这个时候A线程完成了任务,对任务数加1原创 2015-10-12 22:06:04 · 454 阅读 · 0 评论