sizeof笔试题

sizeof笔试题
sizeof笔试题

sizeof笔试题 (2011-03-17 14:08)

分类:笔试

1.常规

char str1[] = “Hello” ;

char str2[5] = {'H','e','l','l','o'};

char str3[6] = {'H','e','l','l','o','\0'};

char *p1 = "Hello";

char *p2[]={"hello","world"};

int n = 10;

int *q = &n;

sizeof (str1 ) = 6 (自动加了'\0')

strlen (str1 ) = 5 (字符串的长度)

sizeof (str2 ) = 5 (字符数组的大小)

strlen (str2) = 未知 (该字符串缺少结束符'\0')

sizeof (str3) = 6 (字符数组的大小)

strlen (str3) = 5 (该字符串的长度为5)

sizeof ( p1 ) = 4 (p1是一个指针,大小为4)

sizeof ( p2 ) = 8 (p2是长度为2的字符串数组)

sizeof ( n ) = 4 (整型大小为4)

sizeof ( q ) = 4 (q是一个指针,大小为4)

2.动态分配内存

int *p = (int *)malloc( 100 );

sizeof ( p ) = 4 (p是一个指针,大小为4)

3.函数参数

void Function1( char p[],int num ){

sizeof ( p ) = 4 (数组在做为函数参数时均化为指针)

}

void Function2( int p[],int num ){

sizeof ( p ) = 4 (数组在做为函数参数时均化为指针)

}

4.多重继承

class A{};

class B{};

class C:public A,public B{};

class D:virtual public A{};

class E:virtual public A,virtual public B{};

sizeof ( A ) = 1 (空类大小为1,编译器安插一个char给空类,用来标记它的每一个对象)

sizeof ( B ) = 1 (空类大小为1,编译器安插一个char给空类,用来标记它的每一个对象)

sizeof ( C ) = 1 (继承或多重继承后空类大小还是1)

sizeof ( D ) = 4 (虚继承时编译器为该类安插一个指向父类的指针,指针大小为4)

sizeof ( E ) = 8 (指向父类A的指针与父类B的指针,加起来大小为8)

5.数据对齐

类(或结构)的大小必需为类中最大数据类型的整数倍.CPU访问对齐的数据的效率是最高的,因此通常编译浪费一些空间来使得我们的数据是对齐的

class A{

public:

int a;

};

class B{

public:

int a ;

char b;

};

class C{

public:

int a ;

char b;

char c;

};

sizeof(A) = 4 (内含一个int ,所以大小为4)

sizeof(B) = 8 (int为4,char为1,和为5,考虑到对齐,总大小为int的整数倍即8)

sizeof(C) = 8 (同上)

6.函数与虚函数

编译器为每个有虚函数的类都建立一个虚函数表(其大小不计算在类中),并为这个类安插一个指向虚函数表的指针,即每个有虚函数的类其大小至少为一个指针的大小4

class A{

public:

int a;

void Function();

};

class B{

public:

int a;

virtual void Function();

};

class C:public B{

public:

char b;

};

class D:public B{

public:

virtual void Function2();

};

class E{

public:

static void Function();

};

sizeof (A) = 4 (内含一个int,普通函数不占大小)

sizeof (B) = 8 (一个int ,一个虚函数表指针)

sizeof (C) =12 (一个int ,一个虚函数表指针,一个char ,再加上数据对齐) sizeof (D) = 8 (一个int ,一个虚函数表指针,多个虚函数是放在一个表里的,所以虚函数表指针只要一个就行了)

sizeof (E) = 1 (static 函数不占大小,空类大小为1)

7.父类的私有数据

虽然在子类中不可用,但是是可见的,因此私有的数据还是要占子类的大小class A{

private:

int a;

};

class B:public A{};

sizof(B) = 4; (内含一个不可用的父类的int)

8.大概就这么多了吧,想到再加吧。虚函数,多重继承,空类是比较复杂的,大家大概记住知道就行了

weiloujushi补充:

class static_D

{

int static intVar;

static void fun(){}

};

sizeof(static_D) ==1 //静态数据成员不计入类内

本文来自CSDN博客,转载请标明出处:

https://www.360docs.net/doc/c412641802.html,/yingxunren/archive/2009/04/03/4002276.aspx

sizeof计算含有虚函数的类的空间大小

sizeof计算含有虚函数的类的空间大小 当我们计算一种数据类型所占用的空间大小时,很easy,sizeof就可以解决掉。如果我们计算一个类,一个空类,或者一个含有虚函数然后又派生子类时,这时候他们所占用的内存空间是如何变化的呢?下面我们就通过代码来介绍下。 一个不含有虚函数的普通类与其派生类的内存关系 class Base { public: Base(int x):a(x) {} void print() { cout<

2.对于Derived类 Derived类继承于Base类,自然的继承了其成员变量a,自身又扩展了自己的成员变量b,因而多了4个字节。所以Derived类所占用的内存空间大小应该为8字节。 一个含有虚函数的类与其派生类的内存空间占用关系 class A { public: A(int x):a(x){} virtual void print(){cout<

sizeof()用法汇总

sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。 2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。 注意:int *p; sizeof(p)=4; 但sizeof(*p)相当于sizeof(int); 对于静态数组,sizeof可直接计算数组大小; 例:int a[10];char b[]="hello"; sizeof(a)等于4*10=40; sizeof(b)等于6; 注意:数组做型参时,数组名称当作指针使用!! void fun(char p[]) {sizeof(p)等于4} 经典问题: double* (*a)[3][6]; cout<

运筹学课程设计指导书

运筹学课程设计指导书 一、课程设计目的 1、初步掌握运筹学知识在管理问题中应用的基本方法与步骤; 2、巩固和加深对所学运筹学理论知识及方法的理解与掌握; 3、锻炼从管理实践中发掘、提炼问题,分析问题,选择建立运筹学模型,利用模型求解问题,并对问题的解进行分析与评价的综合应用能力; 4、通过利用运筹学计算机软件求解模型的操作,掌握运筹学计算软件的基本操作方法,并了解计算机在运筹学中的应用; 二、课程设计内容与步骤 第一部分是基本实验,为必做部分;需要每位同学单独完成,并写出相应的实验报告。第二部分是提高部分,题目自选或自拟,锻炼综合应用运筹学知识及软件解决实际问题的能力;可以单独完成,也可以合作完成(最多3人一组),写出相应的报告。 1、基本实验在完成基本实验后,每位同学要按照实验要求完成实验报告,实验报告应包括问题描述、建模、上机求解、结果分析及答辩几方面。实验报告必须是打印稿(word文档等),手写稿无效。请大家按照要求认真完成实验报告,如果两份实验报告雷同,或相差很少,则两份实验报告均为0分,其它抄袭情况,将根据抄袭多少扣分。(约占总分的70%) 2、提高部分根据自己的兴趣或所查找的资料,从实际情况出发,自拟题目;在实验报告中,陈述问题,建立模型,求解,结果分析,此部分应着重突出自己的观点和想法。(此部分按照排名先后给分,约占总分的30%) 三、课程设计要求 1、实验目的 学会建立相应的运筹学模型 学会Excel、Lindo和WinQSB,QM for windows软件的基本使用方法 学会用Excel、Lindo和WinQSB,QM for windows软件得到问题的最优解 2、实验要求 分析问题、建立模型,并阐明建立模型的过程; 说明并显示软件使用和计算的详细过程与结果; 结果分析,将结果返回到实际问题进行分析、评价。 四、题目内容 (一)Excel规划求解基本实验 1、雅致家具厂生产4种小型家具,由于该四种家具具有不同的大小、形状、重量和风格,所以它们所需要的主要原料(木材和玻璃)、制作时间、最大销售量与利润均不相同。该厂每天可提供的木材、玻璃和工人劳动时间分别为600单位、1000单位与400小时,详细的数据资料见下表。问: (1)应如何安排这四种家具的日产量,使得该厂的日利润最大? (2)家具厂是否愿意出10元的加班费,让某工人加班1小时? (3)如果可提供的工人劳动时间变为398小时,该厂的日利润有何变化? (4)该厂应优先考虑购买何种资源?

strlen,strcat,strcpy,strncpy,strcmp函数的比较

一、s trlen函数 strlen()函数用来计算字符串的长度,其原型为: unsigned int strlen (char *s); 【参数说明】s为指定的字符串。 strlen()用来计算指定的字符串s 的长度,不包括结束字符"\0"。 【返回值】返回字符串s 的字符数。 注意一下字符数组,例如 char str[100] = "https://www.360docs.net/doc/c412641802.html,/cpp/u/biaozhunku/"; 定义了一个大小为100的字符数组,但是仅有开始的11个字符被初始化了,剩下的都是0,所以 sizeof(str) 等于100,strlen(str) 等于11。 如果字符的个数等于字符数组的大小,那么strlen()的返回值就无法确定了,例如 char str[6] = "abcxyz"; strlen(str)的返回值将是不确定的。因为str的结尾不是0,strlen()会继续向后检索,直到遇到'\0',而这些区域的内容是不确定的。 注意:strlen() 函数计算的是字符串的实际长度,遇到第一个'\0'结束。 如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止。而sizeof返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen()是函数。 二、s trcat函数 strcat() 函数用来连接字符串,其原型为: char *strcat(char *dest, const char *src); 【参数】dest 为目的字符串指针,src 为源字符串指针。 strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个NULL。 注意:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。

c语言的sizeof函数

? ? 聚焦 ? 论坛 ? 博客 ? 来吧 ? 问答 ? 游戏 ? 品牌 ? 购物街 ? ? 登录 ? 注册 ? 社区服务 首页 > 提问列表 > 提问 c 中的sizeof 函数放在哪个头文件? [编程 数据库 ] 悬赏点数 10 3个回答 肚兜2569 2009-06-18 13:04:51 172.30.211.* c 中的sizeof 函数放在哪个头文件? 回答 登录并发表 取消 回答 jjvcd3 2009-06-18 13:05:15 59.175.191.* sizeof 是单目运算符,是关键字之一,不是函数,没有头文件 lclcug 2009-06-18 23:00:39 58.242.187.* 1.sizeof 操作符的结果类型是size_t ,它在头文件中typedef 为unsign ed int 类型。该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof 是算符 圣斗士之家 2009-06-19 17:54:42 123.6.3.* SizeOf Pascal 的一种内存容量度量函数: 用法: Var 等您来回答 pe 的桌面文件放在哪个目录下 - 0个回答 魔兽3.0.5版本安装文件怎样放在别的磁盘? - 1个回答 psp 看电影把影片放在哪个文件里? - 1个回答 多普达领航者的历史地址放在哪个文件中 - 1个回答 艾奇mp4转换器转换完的文件会放在哪里 - 1个回答

a : array[1..10000] of longint; Begin Writeln(SizeOf(a)); End. 输出:40000 如果定义Integer,则输出:20000 c语言中判断数据类型长度符 用法 sizeof(类型说明符,数组名或表达式); 或 sizeof 变量名 1. 定义: sizeof是C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数。 MSDN上的解释为: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t. 其返回值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值,一般定义为 typedef unsigned int size_t; 世上编译器林林总总,但作为一个规范,它们都会保证char、sig ned char和unsigned char的sizeof值为1,毕竟char是我们编程能用的最小数据类型。 2. 语法: sizeof有三种语法形式,如下: 1) sizeof( object ); // sizeof( 对象); 2) sizeof( type_name ); // sizeof( 类型); 3) sizeof object; // sizeof 对象; 所以, int i; sizeof( i ); // ok sizeof i; // ok sizeof( int ); // ok sizeof int; // error 既然写法3可以用写法1代替,为求形式统一以及减少我们大脑的负担,第3种写法,忘掉它吧!实际上,sizeof计算对象的大小也是转换成对对象类型的计算,也就是说,同种类型的不同对象其sizeof 绿坝截屏文件放在哪个目 录 - 2个回答 放在桌面的文件在哪个文件夹 - 5个回答

C语言32个关键字九种控制语句34种运算符

总结归纳了C语言的32个关键字 第一个关键字:auto 用来声明自动变量。可以显式的声明变量为自动变量。只要不是声明在所有函数之前的变量,即使没加auto关键字,也默认为自动变量。并且只在声明它的函数内有效。而且当使用完毕后,它的值会自动还原为最初所赋的值。自动变量使用时要先赋值,因为其中包含的是未知的值。 例:auto int name=1; 第二个关键字:static 用来声明静态变量。可以显式的声明变量为静态变量。也为局部变量。只在声明它的函数内有效。它的生命周期从程序开始起一直到程序结束。而且即使使用完毕后,它的值仍旧不还原。即使没有给静态变量赋值,它也会自动初始化为0. 例:static int name=1. 第三个关键字:extern 用来声明全局变量。同时声明在main函数之前的变量也叫全局变量。它可以在程序的任何地方使用。程序运行期间它是一直存在的。全局变量也会初始化为0. 例:extern int name; 第四个关键字:register 用来声明为寄存器变量。也为局部变量,只在声明它的函数内有效。它是保存在寄存器之中的。速度要快很多。对于需要频繁使用的变量使用它来声明会提高程序运行速度。 例:register int name=1; 第五个关键字:int 用来声明变量的类型。int为整型。注意在16位和32位系统中它的范围是不同的。16位中占用2个字节。32位中占用4个字节。还可以显式的声明为无符号或有符号: unsigned int或signed int .有符号和无符号的区别就是把符号位也当作数字位来存储。也可用short和long来声明为短整型,或长整行。 例:int num; 第六个关键字:float 用来声明变量的类型。float为浮点型,也叫实型。它的范围固定为4个字节。其中6位为小数位。其他为整数位。 例:float name;

MATLAB与在运筹学中的应用

MATLAB与在运筹学中的应用 摘要:论文通过MATLAB在运筹学中的应用实例,探讨了MATLAB在运筹学中的应用方法和技巧,初步了解matlab中优化工具箱的使用。 关键字:MATLAB应用运筹学优化计算 引言 运筹学是近代应用数学的一个分支,主要是研究如何将生产、管理等事件中出现的运筹问题加以提炼,然后利用数学方法进行解决的学科。运筹学是应用数学和形式科学的跨领域研究,利用像是统计学、数学模型和算法等方法,去寻找复杂问题中的最佳或近似最佳的解答。运筹学经常用于解决现实生活中的复杂问题,特别是改善或优化现有系统的效率。运筹学中常用的运算工具有Matlab、Mathematica、Maple、SAS 、SPSS、Lindo/Lingo、GAMS、WinQSB、Excel、其他,如SQP、DPS、ORS、Visual Decision、Decision Explore、AIMMS、Crystal等。 Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,和Mathematica、Maple并称为三大数学软件。 用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括Matlab和Simulink两大部分。 主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 将matlab用于运筹学的最优化运算可以很好的解决优化问题,而且matlab 还专门有优化工具箱,是处理优化问题更加方便。 一、例:0-1规划(《运筹学》80页例3-9) 求minZ=x1-3*x2+6*x3+2*x4-4*x5 6*x1+2*x2-x3+7*x4+x5<=12 约束条件 x1+4*x2+5*x3-x4+3*x5>=10 Xj=0或1,j=1,2,3,4

C语言中的sizeof的理解

C语言中的sizeof的理解。。 一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型sizeof使用形式:sizeof(type) 数据类型必须用括号括住。如sizeof(int)。 2、用于变量sizeof使用形式:sizeof(var_name)或sizeof var_name 变量名可以不用括号括住。如sizeof(var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。 注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。 如sizeof(max)若此时变量max定义为int max(),sizeof(char_v)若此时char_v定义为char char_v[MAX]且MAX未知,sizeof(void)都不是正确形式。 三、sizeof的结果 sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。 1、若操作数具有类型char、unsigned char或signed char,其结果等于1。 ANSI C正式规定字符类型为1字节。 2、int、unsigned int、short int、unsigned short、long int、unsigned long、float、double、long double类型的sizeof在ANSI C中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、2、4、4、4、8、10。 3、当操作数是指针时,sizeof依赖于编译器。例如Microsoft C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4。 4、当操作数具有数组类型时,其结果是数组的总字节数。 5、共用体类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof 是这种类型对象的总字节数。 让我们看如下结构: struct{char b;double x;}a; 在某些机器上sizeof(a)=12,而一般sizeof(char)+sizeof(double)=9。 这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被4整除的地址。 6、如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。 四、sizeof与其他操作符的关系 sizeof的优先级为2级,比/、%等3级运算符优先级高。它可以与其他操作符一起组成表达式。如i*sizeof(int);其中i为int类型变量。 五、sizeof的主要用途 1、sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如: void*malloc(size_t size), size_t fread(void*ptr, size_t size, size_t nmemb, FILE*stream)。 2、sizeof的另一个的主要用途是计算数组中元素的个数。例如: void*memset(void*s, int c, sizeof(s))。

C语言二级考前一个月复习概况

整数的三种表示形式 表示形式 组成 开头部分 十进制 D,或不加表示 0-9 以1-9开头 八进制 O 0-7 以0开头 十六进制 H 0-9,A-F 以0x 开头 int a[100],*p; 等价语句 p=a; P=&a[0]; 等价语句 p=a+1; P=&a[1]; 文本文件 二进制文件 使用方式 含义 使用方式 含义 r 打开文本文件进 行只读 rb 打开二进制文件进行只读 w 建立新的文本文件进行只写 wb 建立二进制文件进行只写 a 打开文本文件进 行追加 ab 打开二进制文件进行追加/写 R+ 打开文本文件进 行读/写 Rb+ 打开二进制文件进行读/写 W+ 建立新的文本文件进行读/写 Wb+ 建立二进制文件进行读/写 A+ 打开文本文件进行读/写/追加 Ab+ 打开二进制文件进行读/写/追加

指针是以地址作为其值的变量,数组名的值是一个特殊的固定地址,可以作为常量指针。 类型 名称 类型名 数据长度 整型 整型 Int 32位 短整型 Short int 16位 长整型 Long int 32位 字符型 字符型 Char 8位 实型(浮点型) 单精度浮点型 float 32位 双精度浮点型 double 64位 函数 数据类型 格式 printf float %f double %e scanf float %f %e double %lf %le 字符串的输入和输出 输入 Scanf() 该函数遇到空格或回车输入结束 Gets() 该函数遇到回车符输入结束 输出 Printf() 输出时遇到’\0’输出结束 Puts() 输出时遇到’\0’输出结束 运算符 优先级 结合方式 优先级:高->低 逻辑运算符 ! 右->左 算术运算符 ++ -- + - * 右->左 * / % + - 左->右 关系运算符 <= < >= > == != 左->右 逻辑运算符 && || 左-> 右 条件表达式 ?: 右->左 赋值运算符 *= /= %= += - = = 右->左

求字符串长度

字符串的长度通常是指字符串中包含字符的数目,但有的时候人们需要的是字符串所占字节的数目。常见的获取字符串长度的方法包括如下几种。 1.使用sizeof获取字符串长度 sizeof的含义很明确,它用以获取字符数组的字节数(当然包括结束符0)。对于ANSI字符串和UNICODE字符串,形式如下: 1.sizeof(cs)/sizeof(char) 2.sizeof(ws)/sizeof(wchar_t) 可以采用类似的方式,获取到其字符的数目。如果遇到MBCS,如"中文ABC",很显然,这种办法就无法奏效了,因为sizeof()并不知道哪个char是半个字符。 2.使用strlen()获取字符串长度 strlen()及wcslen()是标准C++定义的函数,它们分别获取ASCII字符串及宽字符串的长度,如: 1.size_t strlen( const char *string ); 2.size_t wcslen( const wchar_t *string ); strlen()与wcslen()采取0作为字符串的结束符,并返回不包括0在内的字符数目。 3.使用CString::GetLength()获取字符串长度 CStringT继承于CSimpleStringT类,该类具有函数: 1.int GetLength( ) const throw( ); GetLength()返回字符而非字节的数目。比如:CStringW中,"中文ABC"的GetLength()会返回5,而非10。那么对于MBCS呢?同样,它也只能将一个字节当做一个字符,CStringA表示的"中文ABC"的GetLength()则会返回7。 4.使用std::string::size()获取字符串长度 basic_string同样具有获取大小的函数: 1.size_type length( ) const; 2.size_type size( ) const;

sizeof深入理解(vcbase)

sizeof深入理解(vcbase) ? 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小。 ? 2.sizeof是算符,strlen是函数。 ? 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。 sizeof还可以用函数做参数,比如: ?short f(); ?printf("%d\n", sizeof(f())); 输出的结果是sizeof(short),即2。 ? 4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。 ? 5.大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因 ?char str[20]="0123456789"; ?int a=strlen(str); //a=10; ?int b=sizeof(str); //而b=20; ? 6.strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。 ?7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。 ?8.当适用了于一个结构类型时或变量, sizeof 返回实际的大小,当适用一静态地空间数组, sizeof 归还全部数组的尺寸。 sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸 ?9.数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,如: ?fun(char [8]) ?fun(char []) 都等价于 fun(char *) 在C++里传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小如果想在函数内知道数组的大小,需要这样做:进入函数后用memcpy 拷贝出来,长度由另一个形参传进去 fun(unsiged char *p1, int len) { unsigned char* buf = new unsigned char[len+1] memcpy(buf, p1, len); } 有关内容见: C++ PRIMER? ?10.计算结构变量的大小就必须讨论数据对齐问题。为了CPU存取的速度最快(这同CPU 取数操作有关,详细的介绍可以参考一些计算机原理方面的书),C++在处理数据时经常把结构变量中的成员的大小按照4或8的倍数计算,这就叫数据对齐(data

最新sort函数的用法

sort函数的用法 做ACM题的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。STL里面有个sort 函数,可以直接对数组排序,复杂度为n*log2(n)。使用这个函数,需要包含头文件。 做ACM题的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。STL里面有个sort 函数,可以直接对数组排序,复杂度为n*log2(n)。使用这个函数,需要包含头文件。 这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。 拿我出的“AC的策略”这题来说,需要对数组t的第0到len-1的元素排序,就写sort(t,t+len); 对向量v排序也差不多,sort(v.begin(),v.end()); 排序的数据类型不局限于整数,只要是定义了小于运算的类型都可以,比如字符串类string。 如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。想把刚才的整数数组按降序排列,可以先定义一个比较函数cmp bool cmp(int a,int b) { return a>b; } 排序的时候就写sort(a,a+100,cmp); 假设自己定义了一个结构体node struct node{ int a; int b; double c;

运用线性规划对运输问题研究

运用线性规划对运输问题研究 班级:金融103班姓名:王纬福学号:5400210132摘要:由于企业选择运输路线或运输工具不合理而导致物流运输成本不能最小化的问题普遍存在而管理运筹学却能很好的解决此问题。通过科学的方法对问题进行具体化再建立数学模型并求解,就能找到运输成本最小的运输组合。 关键词:物流运输成本、输成本、管理运筹学、WinQSB2.0、线性规划 一、引言 日常生活中,人们经常需要将某些物品由一个空间位置移动到另一个空间位置,这就产生了运输。如何判定科学的运输方案,使运输所需的总费用最少,就是管理运筹学在运输问题上的运用需要解决的问题。 运输问题是一类应用广泛的特殊的线性规划问题,在线性规划的一般理论和单纯形法出现以前,康托洛维奇(L.V.Kant)和希奇柯克(F.L.Hitchcock)已经研究了运输问题。所以,运输问题又有“康-希问题”之称。对于运输问题(Transportation Problem TP)当然可用前面所讲的单纯形法求解,但由于该问题本身的特殊性,我们可以找到比标准单纯形法更简单有效的专门方法,从而节约计算时间和费用。主要是因为它们的约束方程组的系数矩阵具有特殊结构,使得这类问题的求解方法比常规的单纯形法要更为简便。 一、研究现状 运输问题的研究较多,并且几乎所有的线性规划书中都有论述。遗憾的是一些书中所建立的数学模型都不够全面和系统的。但是也有一些模型是严谨的没有漏洞和缺陷,并且很容易在此基础上修改或添加一些其他约束条件便于在实际工程中进行应用。管理运筹学在运输问题上的研究较为深入、全面、系统。对于计算机软件的引用也很前言,winQSB2.0对于普通甚至深入研究运输问题就已经是简单而又使用、耐用、好用的了。现在相关的杂志、期刊都越来越多关于管理运筹学,关于运输问题的文章论文初版,越来越得到重视。 二、文献回顾 随着物流行业和企业对物流运输要求的不断提高,企业的面临着更大的市场竞争,其运输活动在企业不断发展过程中,面临着越来越大难度的运输组合的选择决策问题。如何正确解决这个问题,是企业能够持续经营和发展不可忽视和必须面对的。这个问题同时也引起了企业界、学术界等社会各界的广泛关注。运输问题的实质是企业与运输组合的经济性问题,成功的企业通常都会面临如何选取最佳运输组合或运输路线这样一个重要问题,即以企业运输成本最小化作为确定最佳运输组合或运输路线的原落脚点。 四、案例分析 例:某公司下设生产同类产品的加工厂A1、A2、A3,生产的产品由4个销售点B1、B2、B3、B4出售。各工厂的生产量、各销售点的销量以及各工厂到各销售点的单位运价如下表:

字符数组和字符串的sizeof( )和strlen()

目录 一、数组或字符串的长度 1、sizeof()---求所占的字节数 (1)、对于整型字符型数组 (2)、对于整型或字符型指针 2、strlen()---字符数组或字符串所占的字节数 (1)、针对字符数组 (2)、针对字符指针 3、sizeof()与strlen()区别 4、c++中的字符串string的长度 一、数组或字符串的长度 1、sizeof()---求所占的字节数 (1)、对于整型字符型数组 int A[]={1,4,5,2,8,6,0}; //求整型数组A所占的字节数 int i=sizeof(A); //i表示整型数组A所占的总空间的字节数 cout<<” i=sizeof(A)= ”<

枚举大小sizeof中枚举的大小详解

至从语言开始类型就被作为用户自定义分类有限集合常量地方法被引入到了语言当中,而且一度成为中定义编译期常量地唯一方法(后来在类中引入了静态整型常量). 根据上面对类型地描述,有以下几个问题: .到底所定义出来地类型是一个什么样地类型呢? .作为一个用户自定义地类型其所占用地内存空间是多少呢? .使用类型是否真地能够起到有限集合常量地边界约束呢? .大家可能都知道类型和类型具有隐示(自动)转换地规则,那么是否真地在任何地方都可以使用类型地变量来代替类型地变量呢? . 到底所定义出来地类型是一个什么样地类型呢? 在中大家都知道仅仅有两种大地类型分类:类型(注())和类类型. 所定义地类型其实属于类型,也就是说它会参与到类型地隐示转换规则当中去,所以才会出现类型与类型之间地隐示转换现象. 那么也就是说所定义地类型不具备名字空间限定能力(因为不属于类类型),其所定义地常量子具备和类型所在名字空间相同地可见性,由于自身没有名字限定能力,所以会出现名字冲突现象. 如: { { , }; { , }; }; 上面地例子会出现、名字冲突编译时错误,原因就在于枚举子(、)是名字空间中地名字,同样在引用该中地枚举子时必须采用这样地方式进行,而不是来进行引用. 注()类型: 你可以将类型看作是一种来自外太空地用绿色保护层包装地数据类型,意为“”(译者:如果一定要译成中文,那就叫“彻头彻尾地老数据”怎么样!)这就是类型地含义. 其确切定义相当粗糙(参见标准),其基本意思是类型包含与兼容地原始数据. 例如,结构和整型是类型,但带有构造函数或虚拟函数地类则不是. 类型没有虚拟函数,基类,用户定义地构造函数,拷贝构造,赋值操作符或析构函数. 为了将类型概念化,你可以通过拷贝其比特来拷贝它们.此外,类型可以是非初始化地.b5E2R。 . 作为一个用户自定义地类型其所占用地内存空间是多少呢? 该问题就是( )等于多少地问题,是不是每一个用户自定义地枚举类型都具有相同地尺寸呢? 在大多数地位编译器下(如:、等)一个枚举类型地尺寸其实就是一个( )地大小,难道枚举类型地尺寸真地就应该是类型地尺寸吗? 其实不是这样地,在标准文档()中并没有这样来定义, 标准中是这样说明地:“枚举类型地尺寸是以能够容纳最大枚举子地值地整数地尺寸”, 同时标准中也说名了:“枚举类型中地枚举子地值必须要能够用一个类型表述”, 也就是说,枚举类型地尺寸不能够超过类型地尺寸,但是是不是必须和类型具有相同地尺寸呢?上面地标准已经说得很清楚了,只要能够容纳最大地枚举子地值地整数就可以了,那么就是说可以是、和. 例如:

C语言中sizeof()的用法

C语言中sizeof()的用法 2008-12-31 09:45:35.0 来源:51CTO 关键词:C语言 要参加软件研发的笔试(C/C++)几乎都会涉及到sizeof()的用法,我昨天也遇到了,有的也会,但是真正sizeof()的核心还是没有领会,今天上网,无聊中就看到了详细的sizeof()的阐述,现在分享给大家。 ------------sizeof---------------- sizeof 一般形式为:sizeof(object),也可以sizeof var_char,不过大部分programer 习惯用sizeof()。 对象可以是表达式或者数据类型名,当对象是表达式时,括号可省略。sizeof是单目运算符,其运算符的含义是:求出对象在计算机内存中所占用的字节数。一般来讲,不同的机器,运行不同的对象是不一样的,当目前几乎所有的机器都是32位,很少16位的,所以一般考试都是基于32位的window和linux的。 C语言中数据类型不多。 1.整数型的: short,int,long(我没有考虑符号问题),一般c语言书上讲,int是2个字节的,即16位,范围是-32768-32767,long是4个字节,范围是-2^32---2^32-1。当时在xp上运行sizeof(int)的时候,会output 4.这就是32位的原因。sizeof(long)也是4. 如下:#include "stdio.h" #include "string.h" #include "stdlib.h" int main() { short int sa=10; int a=10; long la=10; float f = 20; double d=20; char ch=''c''; char str[]="ABC"; char *p=str; struct str{ double d; char ch; int data; }str_wu; struct str1{ char ch; double d; int data; }str_wu1; printf("sizeof(short):%d\n",sizeof(sa)); printf("sizeof(int):%d\n",sizeof(a));

枚举大小sizeof 中枚举的大小详解

至从C语言开始enum类型就被作为用户自定义分类有限集合常量的方法被引入到了语言当中,而且一度成为C++中定义编译期常量的唯一方法(后来在类中引入了静态整型常量)。 根据上面对enum类型的描述,有以下几个问题: 1.到底enum所定义出来的类型是一个什么样的类型呢? 2.作为一个用户自定义的类型其所占用的内存空间是多少呢? 3.使用enum类型是否真的能够起到有限集合常量的边界约束呢? 4.大家可能都知道enum类型和int类型具有隐示(自动)转换的规则,那么是否真的在任何地方都可以使用enum类型的变量来代替int类型的变量呢? 1. 到底enum所定义出来的类型是一个什么样的类型呢? 在C++中大家都知道仅仅有两种大的类型分类:POD类型(注(1))和类类型。 enum所定义的类型其实属于POD类型,也就是说它会参与到POD类型的隐示转换规则当中去,所以才会出现enum类型与int类型之间的隐示转换现象。 那么也就是说enum所定义的类型不具备名字空间限定能力(因为不属于类类型),其所定义的常量子具备和enum类型所在名字空间相同的可见性,由于自身没有名字限定能力,所以会出现名字冲突现象。 如: struct CEType { enum EType1 { e1, e2 }; enum EType2 { e1, e2 }; }; 上面的例子会出现e1、e2名字冲突编译时错误,原因就在于枚举子(e1、e2)是CEType 名字空间中的名字,同样在引用该CEType中的枚举子时必须采用CEType::e1这样的方式进行,而不是CEType::EType1::e1来进行引用。 注(1)POD类型: 你可以将POD 类型看作是一种来自外太空的用绿色保护层包装的数据类型,POD 意为“Plain Old Data”(译者:如果一定要译成中文,那就叫“彻头彻尾的老数据”怎么样!)这就是POD 类型的含义。 其确切定义相当粗糙(参见C++ ISO 标准),其基本意思是POD 类型包含与C 兼容的原始数据。 例如,结构和整型是POD 类型,但带有构造函数或虚拟函数的类则不是。 POD 类型没有虚拟函数,基类,用户定义的构造函数,拷贝构造,赋值操作符或析构函数。 为了将POD 类型概念化,你可以通过拷贝其比特来拷贝它们。此外,POD 类型可以是非初始化的。 2. 作为一个用户自定义的类型其所占用的内存空间是多少呢? 该问题就是sizeof( EType1 )等于多少的问题,是不是每一个用户自定义的枚举类型都具有相同的尺寸呢? 在大多数的32位编译器下(如:VC++、gcc等)一个枚举类型的尺寸其实就是一个sizeof( int )的大小,难道枚举类型的尺寸真的就应该是int类型的尺寸吗? 其实不是这样的,在C++标准文档(ISO14882)中并没有这样来定义, 标准中是这样说明的:“枚举类型的尺寸是以能够容纳最大枚举子的值的整数的尺寸”, 同时标准中也说名了:“枚举类型中的枚举子的值必须要能够用一个int类型表述”,

类的大小解析 sizeof()中类的大小详解

1、空类的sizeof是1。空类是指没有成员的类,类中的函数不占空间,除非是虚函数。 如:class A { public: A(){} ~A(){} void fun(){} }; sizeof(A)是1. 注:class A1 { public: A1(){} ~A1(){} void fun(){} char a[0]; }; sizeof(A1)也是1.(VC6.0下编译)

2、若类中包含成员,则类对象的大小只包括其中非静态成员经过对齐所占的空间,对齐方式和结构体相同。如: class A { public: int b; float c; char d; }; sizeof(A)是12. class A { public: static int a; int b; float c; char d; }; sizeof(A)是12. class A { public: static int a; int b; float c; char d; int add(int x,int y) { return x+y; }

sizeof(A)也是12. 3、若类中包含虚函数,则无论有几个虚函数,sizeof类都等于sizeof(数据成员)的和+sizeof(V表指针,为4),如: class Base { public: Base(){cout<<"Base-ctor"<

相关文档
最新文档