c++零碎问题记录

2020年3月6日,正式开始学习C++。记录leetcode上遇到东西;

1.C++使用变量作为数组长度

数组长度必须为常量,其空间分配在中——预编译时就要确定。

解决方法:绕过栈内存,将数组空间开辟在堆空间:

int *d=new int[n];//动态数组
//注意:使用完要 delete[],防止内存泄漏

2.整数上下限

#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX-1)

3.<sstream>定义stringstream类用法

用于流的输入输出操作——提供格式转换。

//将整型 x转换成string型 str
stringstream ss;
string ss;
ss<<x;
ss>>str;

不会主动释放内存,需清空:
ss.clear();ss.str("");

4.字符串操作

vector<string> ss={"yang","zhao"};
访问某元素方式,ss[i][j]ss[i].at(j)

读取字符串长度
sizeof():运算符,值在编译时确定,不能用于返回动态分配空间大小。
strlen():函数,其参数必须为char *,返回字符串长度(不包括/0)
string类中length()/size():返回字节数

子串
.substr(i,n); :字符串第i个位置开始长度为n的子串

查找
s.find(s2,pos);:从下标pos开始查找string对象s2,返回找到第一次匹配的下标值。
s.find_first_of(args);:在s中查找args的任意字符第一次出现的位置。

5.constexpr关键字(C++11)

  • 生成常量表达式:编译时便计算出调用地方的结果。
constexpr int multiply (int x, int y){
    return x * y;
}
// 将在编译时计算
const int val = multiply( 10, 10 );
  • 允许函数被应用在以前调用宏的所有场合,如可用constexpr函数声明数组大小。
constexpr int getDefaultArraySize (int multiplier){
    return 10 * multiplier;
}
int my_array[ getDefaultArraySize(3)];//编译时,声明数组 my_array[30]

constexpr函数的限制:

  • 函数中只能有一个return语句(有极少特例)
  • 只能调用其它constexpr函数
  • 只能使用全局constexpr变量
    注意递归并不受限制。但只允许一个返回语句,那如何实现递归呢?可以使用三元运算符(?:)。例如,计算n的阶乘:
constexpr int factorial (int n){
    return n > 0 ? n * factorial( n - 1 ) : 1;
}

constexpr函数的特点:

  • 只允许包含一行可执行代码。但允许包含typedefs、 using declaration && directives、静态断言等。
  • 同样可在运行时被调用,当这个函数的参数是非常量的。
  • 编译时使用类对象,具体参考C++11系列-常量表达式

6.std

std里面定义了C++的各种标识符,使用容器要#include<容器头文件>using namespace std;

7.

accumulate(a,a+n,initialValue,operator)其中a指向首元素,a+n指向尾元素后一个元素,将首尾中间的元素按照operator(指定的算法比如相加)之后再加上initialValue之后再返回。

  1. copy(start ,end, to)将元素从位置start,start+1...end-1依次复制到位置to,to+1,...to+end-start。必将常用的是copy(list,list+m+1,ostream_iterator<T>(cout,""))其中ostream_iterator<T>(cout,"")是个流迭代器它指向cout流,这就话的意思就是将list和list+m+1之间的内容复制到输出流,也就是用cout输出这其中的内容。

8.new初始化

int *pia = new int[10];    // 10个未初始化int
int *pia2 = new int[10](); // 10个值初始化为0的int

9.指针指向类型

  • char每次移动1个字节;short移动2个字节 ;int , long ,float移动4个字节 ;double移动8个字节
  • 无论是整型数组还是字符数组,数组名作为右值的时候都代表数组首元素的首地址。
    数组发生降级(数组名退化为数组首元素的地址)的情况:数组传参、数组名参与运算
    数组名不会发生降级的情况:sizeof(数组名)、取地址数组名(取到的是整个数组的地址而不是首元素的地址)
    比较分析与数组相关的sizeof和strlen
    32位指针是4字节

sizeof():
https://blog.csdn.net/skyroben/article/details/53207795

计算数组大小:
  • 当括号传数组名,指的是整个数组所有元素占多少个字节;当传数组元素,指的是数组元素占多少个字节;一般有取地址符&使用sizeof计算所占内存的大小即为计算地址的大小为四个字节(32位机器)。
计算类大小:

(1)首先看一下类有没有父类,如果没有父类:

     a:且没有虚函数的话,直接计算类的成员变量的大小(注:类的静态成员变量不计入类的大小);
     b:有虚函数的话,类的大小=类的成员变量的大小+一个虚表地址的大小  ; 

(2) 有父类:

 a:父类没有虚函数,子类也没有虚函数 ,直接计算两个类的成员变量的大小相加;
 b:子类有虚函数或者父类有虚函数或者两个都有虚函数,类的大小=两个类的成员变量的大小之和+一个虚表地址的大小;

(3)菱形继承(没有虚继承):

8.

int*p1 = reinterpret_cast<int*>(p); //将p强制转换位int* 赋值给p1

  • 堆上的对象指针:手动释放,new;
  • 栈上的对象,main函数结束释放;
  • 静态储存区,在程序结束时释放,static;

虚函数——动态绑定:

  • 虚函数:基类函数声明为virtual时,指向派生,除非派生没有可调用的实现,才调用基类虚函数。
  • 不为虚函数:基类指针必然调用基类方法,派生类指针必然调用派生类方法

构造函数

9、深拷贝、浅拷贝(拷贝构造)

  • 深拷贝:被拷贝对象在动态分配的存储空间,先动态申请一块存储空间,逐字节拷贝内容;
  • 浅拷贝:仅拷贝指针字面值——当释放原对象,产生空悬指针。

10、在c/c++函数中,不应该返回局部变量数组

  • 在函数中,局部变量是存储在栈内存中的,而函数的返回是值拷贝
  • 因此数组返回实际是返回指向栈内存中这个原数组的首地址,但是函数结束后该内存是会被自动回收,因此该指向的栈内存是无效的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容