![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 82
和大黄
这个作者很懒,什么都没留下…
展开
-
C++中int和char[]之间的转换
1 整数转化字符串 sprintf在头文件 #include中语法: int sprintf(string format, mixed [args]...);返回值:字符串长度(strlen)转换字符 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=- %% 印出百分比符号,不转换。 %c 整数转成对应的 ASCII 字元。 %d 整数转成十进位。 %f 倍精确度数字转成浮点数。 %o 整数转成八进位。 %s 整数转成字串。 %x 整数转成小写十六进位。 %X 整数转成大写十六原创 2010-07-29 12:38:00 · 54322 阅读 · 1 评论 -
自己实现String类
Implement a string class in C++ with basic functionality like comparison, concatenation, input and output. Please also provide some test c原创 2010-09-04 15:39:00 · 2158 阅读 · 0 评论 -
原码、反码和补码
1、原码、反码和补码的表示方法(1)原码:在数值前直接加一符号位的表示法。[+7]原= 0 0000111 B[-7]原= 1 0000111 B注意:a. 数0的原码有两种形式:[+0]原=00000000B [-0]原=100原创 2011-09-03 21:26:57 · 1548 阅读 · 0 评论 -
临时对象与拷贝构造函数
拷贝构造函数主要应用在以下场景中: 1 根据一个同类型的对象新建一个对象时。注意与=赋值运算符的区别,=不会生成一个新的对象。下面实例:#include using namespace std; class Single { private: int a; public: Single():a(0){原创 2011-06-06 16:22:00 · 2560 阅读 · 0 评论 -
堆和栈的不同点总结
一、程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)一般由程序员分配释放,若程序员不释放,程原创 2011-07-04 10:10:05 · 2708 阅读 · 0 评论 -
STL容器与拷贝构造函数
所有容器提供的都是“value语意”而非“reference语意”。容器内进行元素的安插操作时,内部实施的是拷贝操作,置于容器内。因此STL容器的每一个元素都必须能够拷贝。---> 侯捷、孟岩译 p144页原文 以vector为例,往Vector中(实际上所有STL容器都是这原创 2011-09-04 16:06:55 · 11918 阅读 · 1 评论 -
STL概述
STL提供六大组件,彼此可以组合套用: 1 容器(Containers):各种数据结构,如:vector、list、deque、set、map。用来存放数据。从实现的角度来看,STL容器是一种class template。共约 11 种。 2 算法(algorithms):各种常用算法,如:sort、search、copy、erase。从实现的角度来看,STL算法是一种 f原创 2011-06-03 16:19:00 · 1107 阅读 · 0 评论 -
c++中的前向声明
前向声明:可以声明一个类而不定义它。这个声明,有时候被称为前向声明(forward declaration)。在声明之后,定义之前,类Screen是一个不完全类型(incompete type),即已知Screen是一个类型,但不知道包含哪些成员。不完全类型只能以有限方式使用原创 2011-08-01 09:59:28 · 18349 阅读 · 5 评论 -
std::string
对于vc的std::string:basic_string中:enum{ _BUF_SIZE = 16 / sizeof (_Elem) < 1 ? 1 : 16 / sizeof(_Elem)};union _Bxty{_Elem _Buf[_BUF_SI原创 2011-08-14 19:16:45 · 2893 阅读 · 0 评论 -
STL map 和 set的实现
http://hi.baidu.com/_00000000/blog/item/b666cc19db1ac2f0af5133c5.html摘要:本文列出几个基本的STL map和STL set的问题,通过解答这些问题讲解了STL关联容器内部的数据结构,最后提出了关于U转载 2011-09-21 22:28:26 · 8720 阅读 · 0 评论 -
阻塞IO与非阻塞IO
1 基本概念:阻塞IO:socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会返回。非阻塞IO:非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功。IO模式设置:一般对于一个socket 是阻塞模式还是非阻塞模式有转载 2011-08-30 16:23:26 · 1605 阅读 · 0 评论 -
readn和writen函数, socket编程常用函数
写函数write #include ssize_t write(int fildes,const void *buf,size_t nbyte) write函数将buf中的nbyte字节内容写入文件描述符fd引用的打开文件中,成功时返回写的字节数,失败时返回-1。转载 2011-08-29 21:31:35 · 7783 阅读 · 0 评论 -
STL 容器类型
1. STL有6种序列容器类型 1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacituy()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉。通常此原创 2011-10-25 22:52:39 · 12665 阅读 · 1 评论 -
static使用总结
static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种在C/C++语言中使用, 第三种只在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准).(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数 一、static变量1. 静态局部变量静态局部变量属于静态存储方式,它在函数内定义,生存期为整个源程原创 2011-06-03 22:11:00 · 1141 阅读 · 0 评论 -
sprintf snprintf strcpy memcpy 区别及应用
sprintf 可以进行额外的格式化strcpy 会复制直到出现 '\0' 为止,可能溢出strncpy 会复制一个以 '\0' 结束的字符串,但是如果字符串长度超过指定数量则被截断,但结果可能不包含 '\0' 表示结束memcpy 只负责复制指定数量的 bytes,不处理 '' 的情况memmove 在 memcpy 的基础上对 overlap 的情况进行了处理。这些转载 2011-11-01 22:19:04 · 1417 阅读 · 0 评论 -
失效迭代器(Invalidating Iterators)
当一个容器变化时,指向该容器中元素的迭代器可能失效。这使得在迭代器变化期间改变容器容易出现问题。在这方面,不同的容器提供不同的保障:vectors: 引起内存重新分配的插入运算使所有迭代器失效,插入也使得插入位置及其后位置的迭代器失效,删除运算使得删除位置及其后位置的迭代器失效.vector的push_back操作 可能没事,但是一旦引发内存重分配,所有迭代器都会失效;vector的i转载 2011-11-04 21:28:23 · 5533 阅读 · 0 评论 -
智能指针
1 namespace smart 2 { 3 // 引用计数类. 4 class smart_count 5 { 6 public: 7 smart_count(int c = 0) : use_count(c) {} 8 ~smart_count() {} 9 10 // 增加转载 2011-12-02 10:09:13 · 1340 阅读 · 0 评论 -
子段和问题
一、最大子段和问题:描述:给定由N个整数(可能为负整数)组成的序列a1, a2, ..., an,求该序列形如Sigma{ak} (k=从i到j)的子段和的最大值。本问题可以用枚举和分治来做,但是枚举的复杂度很高,而分治的思路比较复杂,不容易实现。所以只记录DP的方法。记B[j]=Max{Sigma{ak} (k=从i到j)} (1则最大子段和为 Max{B[j]} (1当B[转载 2010-11-05 19:48:00 · 1691 阅读 · 0 评论 -
大端小端的判断
假设从地址0x4000开始存放:0x12345678,是也个32位四个字节的数据,最高字节是0x12,最低字节是0x78:在Little-endian模式CPU内存中的存放方式为:(高字节在高地址, 低字节在低地址)内存地址原创 2010-09-03 13:01:00 · 1563 阅读 · 1 评论 -
unsigned int隐式转换
#include#include#includeusing namespace std;int main(){ unsigned int a = 6; int b = -20; cout<<a+b<<endl; (a+b > 6) ?原创 2010-09-02 22:26:00 · 2903 阅读 · 0 评论 -
如何在C++中实现对输入数是否为小数的判断
<br />思路:先把这个数赋值给一个float型数据,然后把float型数据转化成int型(把float转化成int,转化后,int只保留这个数据的整数部分),最后比较两个数的大小<br /> <br />#include <stdio.h>#include <math.h>int main(void){ float m = 1234.000000;//== float m = 1234.111111;//!= int n = (int) m; if原创 2010-08-09 20:56:00 · 8094 阅读 · 0 评论 -
float在内存中的方式
<br /><br />类型(Type)<br /> <br />存储位数(Bits)<br />总位数(Total)<br />偏移值(Offset)<br />数符(S)<br />阶码(E)<br />尾数(M)<br /> <br /><br /> <br /><br />短实数(float)<br />1<br /> 8<br /> 23<br /> 32<br />127<br />长实数(double)<br />1<br />11<br /> 52<br />转载 2010-09-02 22:23:00 · 1047 阅读 · 0 评论 -
sizeof用法总结
以下运行环境都是一般的,在32位编译环境中 1,基本数据类型的sizeof coutcoutcoutcoutcoutcoutcout2,指针变量的sizeofchar *pc ="abc"; sizeof( pc );转载 2010-09-19 20:28:00 · 1060 阅读 · 0 评论 -
sizeof(结构体)和内存对齐
<br /><br />有的时候,在脑海中停顿了很久的“显而易见”的东西,其实根本上就是错误的。就拿下面的问题来看:<br />struct T<br />{<br />char ch;<br />int i ;<br />};<br />使用sizeof(T),将得到什么样的答案呢?要是以前,想都不用想,在32位机中,int是4个字节,char是1个字节,所以T一共是5个字节。实践出真知,在VC6中测试了下,答案确实8个字节。哎,反正受伤的总是我,我已经有点麻木了,还是老老实实的接受吧!为什么答案和自己想转载 2010-09-19 20:34:00 · 929 阅读 · 0 评论 -
正确的重载operator+
<br /><br />下面的段落中,我将介绍为用户定义类型选择正确的重载operator+的一般性的策略。<br /> <br /> 第一步:选择成员函数或是非成员函数?<br /> 我们可以象使用类的成员函数一样使用+、-或是==等二进制操作符,例如:<br /> class String<br /> {<br /> public:<br /> bool operator==(const String & s); // compare *this and转载 2010-09-04 15:59:00 · 1749 阅读 · 0 评论 -
printf函数
<br /><br />printf函数遵守C调用规范,即参数 从右至左 压栈,堆栈由调用者平衡。(这种从右至左的方式不会随着编译器,机器的不同而不同) )。<br /> <br />[code]<br />printf("%d,%d", i, i++ ); 产生的汇编码大致像下面这样:<br /> <br />mov eax,dword ptr [i] <br />push eax //最原创 2011-05-27 22:26:00 · 1031 阅读 · 0 评论 -
typeid测试
<br />#include<iostream>#include<vector>#include<algorithm>using namespace std;class Base { virtual int fun(){}};class Derived: public Base { int fun(){}};int main(){ Base* bp1 = new Base(); Base* bp2 = new Derived(); Derived*原创 2011-06-02 17:10:00 · 893 阅读 · 0 评论 -
#define #ifdef #endif的用法
<br />使用#ifdef指示符,我们可以区隔一些与特定头文件、程序库和其他文件版本有关的代码。<br /> <br />#ifdef XXX<br />此处是希望发生变化的条件,如包含一个头文件<br />#endif <br /> <br />#include "iostream.h"int main(){#ifdef DEBUG cout<< "Beginning execution of main()";#endif return 0;} <br />运行结果为:Pre原创 2011-06-02 20:07:00 · 3279 阅读 · 0 评论 -
函数模板
(1)实例#includeusing namespace std;templateT minfun(T a,T b){ return a 结果:62.3f如果使用这个模板,cout解决方法1:使用string类型如下:#incl原创 2011-06-02 16:58:00 · 1070 阅读 · 0 评论 -
makefile编写
(1)基本的makefile 准备三个文件:main.c, son.c, son.h(1) son.h:#ifndef SON_H#define SON_H#ifdef __cplusplusextern "C"{#endifvoid print();#ifdef __cplusplus}#endif#endif (2) son.c:#i原创 2011-06-03 10:46:00 · 1005 阅读 · 0 评论 -
类模板
1 模板类入门 #includeusing namespace std;templateclass MyClass{ private: T1 a; T2 b; public: MyClass(T1 a1,T2 b1):a(a1),b(b1){} void display();};原创 2011-06-03 17:34:00 · 889 阅读 · 0 评论 -
const使用总结
常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。因此,定义或说明常类型时必须进行初始化。const的用法有:1 一般常量2 对象常量3 常指针和常引用,多用作函数的参数4 常数据成员5 常成员函数1. 一般常量 一般常量是指简单类型的常量。这种常量在定义时,修饰符const可以用在类型说明符前,也可以用在类型说明符后。如: int const原创 2011-06-03 22:22:00 · 1088 阅读 · 0 评论 -
c ++的operator的两种用法
operator,它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换)。 1.operator overloadingC++可通过operator 重载操作符,格式如下:类型T operator 操作符 (),如比重载+,如下所示#includeusing namespace std;#include原创 2011-06-03 23:13:00 · 15644 阅读 · 2 评论 -
成员初始化列表
类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员初始化阶段可以是显式的或隐式的,取决于是否存在成员初始化表。隐式初始化阶段按照声明的顺序依次调用所有基类的缺省构造函数,然后是所有成员类对象的缺省构造函数。2.进入构造函数后在构造函数中执行一般计算计算阶段由构造函数体内的所有语句构成。在计算阶段中,数据成员的设置被认为是赋值,而不是初始化。使用初始化列表有原创 2011-06-03 23:03:00 · 1135 阅读 · 0 评论 -
C++/c static和匿名命名空间 总结
from http://blog.csdn.net/Monkeycn/article/details/5817138static:1、函数之外的变量就是全局变量,这个想法正确吗? 答: 在C中,完全正确。只不过按有没有加static修饰可以分为静态全局变量和一转载 2011-08-01 13:12:49 · 4522 阅读 · 0 评论 -
c++中的重载,覆盖和隐藏
1 重载成员函数被重载的特征有:1) 相同的范围(在同一个类中);2) 函数名字相同;3) 参数不同;4) virtual关键字可有可无。在 同一可访问区内被声名的几个具有不同参数列的(参数的类型、个数、顺序不同)同名函数,程序会根据不同的参数列来确定具体原创 2011-09-01 22:01:14 · 1193 阅读 · 0 评论 -
标准C++的类型转换
C++通过引进四个新的类型转换操作符克服了C风格类型转换的缺点,这四个操作符是: const_cast( expression ) dynamic_cast( expression ) static_cast( expression ) reinterpret_cast( expression ) 在大多数情况下,对于这些操作符你只需要知道原来你习惯于这样写原创 2010-09-18 15:28:00 · 1469 阅读 · 0 评论