c++拾遗-----复合类型
来源:互联网 发布:杭州观澜网络怎么样 编辑:程序博客网 时间:2024/06/07 08:26
1、cout拼接字符串常量
任何两个由空白分隔的字符串常量都将自动拼接成一个
cout<<"hello " "world"<<endl;cout<<"hello world\n";cout<<"hello ""world\n";
2、sizeof和strlen区别
- sizeof是操作符,结果类型为size_t,typedef中定义为usigned int
- sizeof可以用类型做参数,而strlen参数只能为char*,且以’\0’结尾
- sizeof获得保证能容纳实现所建立的最大对象的字节大小,而strlen关注的数组的实际内容大小,且空字符除外
3、cin与cin.get()及cin.getline()
cin使用空白(空格,制表符,换行符)来确定字符串的结束位置,在读取第一个单词后,自动在其最后加上空白符,存入数组,剩下的单词留在输入队列,并不回丢弃换行符。
cin.getline()通过回车键输入的换行符确定输入结尾。参数一:存放输入的数组名,读取的字符数,如果这个参数为20,那么最多读取19个字符,剩余的空间用于存储自动在结尾处添加的空白符,getline在读取指定数目的字符或遇到换行符时停止读取。但当缓存中的字符个数超过读取字符个数,cin的failbit将被置为true,需调用cin.clear()清除错误标志。
cin.get()
方式一:与getline类似,参数相同,也读到行尾,但并不在读取并丢弃换行符,而是将其留在输入队列中
方式二:不带参数,读取输入队列的下一个字符
4、C与C++结构体声明
在C中创建结构体有2种方式
struct MyStruct{ int element1;};
声明变量:struct MyStruct mystruct;
typedef struct tag_MyStruct{ int element1;}MyStruct,*PMyStruct;
声明结构体别名,上述语句等价于
struct tag_MyStruct{ int element1;};typedef tag_MyStruct MyStruct;typedef tag_MyStruct *PMyStruct;
声明变量:
MyStruct mystruct;
PMyStruct pmystruct;
在c++中可以直接使用struct定义结构体,并且可以在定义时直接声明
struct MyStruct{ int element1;}mystruct;
在定义结构体的同时可以声明变量。
5、共用体
union MyUnion{ int ele1 struct MyStruct { int ele2; int ele3; }}myunion;
存储空间大小以最大的为准,上例为MyStruct大小,只存储一个成员的值,
成员不能包括静态,引用,类。
6、枚举
默认情况下第一个枚举量值为0。枚举量是整形,可以被提升为int形,但int形不能自动转换为枚举类型.同时可以定义该类型枚举变量,并为其赋值,但不能超出该类型范围,同时只能使用枚举量给枚举变量赋值。
enum MyEnum{red,oranage,yellow,green};int color=red+1;//validMyEnum myenum=yellow;//valid//使用+号意味着yellow和orange转为int,相加后无法在赋值给枚举变量MyEnum myenum2=yellow+orange;//invalid
当然也可以给枚举量赋值
enum MyEnum{red,oranage=10,yellow=10,green};/*red=0;orange=10;yellow=10;green=11;*/
可以给枚举量赋相同的值,没有初始化的将比上一个枚举量大一。
7、指针
使用new来分配内存
声明指针并分配内存空间
int *p=new int;
使用delete删除分配空间
创建动态数组,创建完成后删除。
#include<iostream>int main(){ int m; std::cin>>m; int *p=new int[m]; delete []p; return 0;}
使用new和delete应当遵从以下规则:
- 不要使用delete来删除不是new创建的空间
- 不要使用delete来释放同一内存块两次
- 如果使用new[]来为数组分配内存,则应使用delete[]来释放
- 如果使用new为实体分配内存,则应使用delete来释放
- 对空指针使用delete是安全的
加减运算
与整数相加
加1的结果等于在原来的地址上加上指向的对象占用的总字节数
int a[4]={0,1,2,3};int *p=a;int temp=*(p+2);//temp为2
指针相减
当两个指针指向同一数组时,两指针相减得到间隔
int a[4]={0,1,2,3};int *p=a;int *q=&a[4];int diff=q-p;//diff为3
指针常量与常量指针
指针常量,指针指向内存的地址不能改变,必须在声明时初始化;
int a=8;int *const p=&a;*p=5;p++;//error
常量指针,指针指向内存的内容不能改变
int a=5;int b=4;const int *p;p=&a;p=&b;*p=5;//error
8、自动存储、静态存储和动态存储
1、自动存储
在函数内部定义的常规变量使用自动存储空间,在所属函数被调用时创建,在函数结束时消亡。存储在栈中。占用内存总是连续的。
2、静态存储
在程序整个执行期间都存在的存储方式,是变量称为静态的方式有两种:在函数外定义变量;在声明变量时使用static关键字。
3、动态存储
使用new和delete分配或释放内存,变量的生存周期不受程序或函数生存时间控制,内存区域称为堆。占用内存并不一定连续
9、模板类vector与模板类array
vector
使用前需包含头文件vector,vector在std空间中,可以指定不同的存储数据类型,可以指定元素个数
#include<vector>int main(){ int m; std::cin>>m; std::vector<int> arr(m); return 0;}
使用new和delete来管理内存,效率不高,基本用法:vector<typename> vt(n_elem),创建一个名为vt的vector对象,可以存储n_elem个typename类型元素
array
使用前需包含头文件array,同样声明在std空间中,基本用法:array<typename,n_elem> arr;n_elem不能为变量,可以直接将一个array对象赋值给另一个array对象
相同点
都可以使用标准数组表示法来访问各元素
可以使用at()访问元素,能够检测下标超界,但效率较低
不同点
array与数组都存储在栈中,而vector存储在自由存储区
- c++拾遗-----复合类型
- Object-C学习 复合
- 《Objective-C基础教程》第5章 复合
- C++:复合类型
- 【c++】复合类型
- C-定义类型
- 20120809-课堂笔记--复合
- c++拾遗-----开始学习c++
- c++拾遗-----处理数据
- c++拾遗-----函数
- c++拾遗-----函数探幽
- c++拾遗-----内存模型
- 转载:WIN32 SDK编程拾遗-系统托盘图标
- C++Primer之复合类型
- 1.5 c++_复合类型
- Redy语法分析--语句与复合语句结点
- oracle 分区,range-list,范围-列表复合分区
- 学习C++——复合类型
- 《machine learning with spark》学习笔记--分类
- 两个跟锁屏解锁相关的window的flag
- 线程池学习笔记1
- CreateCompatibleDC与CreateCompatibleBitmap
- 杭电1873看病要排队
- c++拾遗-----复合类型
- Java面向对象程序设计----核心概念
- LeetCode Contains Duplicate
- 神一样的爱因斯坦,真的和外星人有什么联系?
- Android SDK代理服务器解决国内不能更新下载问题
- HDU 5625 Clarke and chemistry
- cocos2d-js v3.1 bug记录
- overlay机制
- Codeforces 479E Riding in a Lift (DP)