C++ new 可以很方便的 分配一段内存。

比如  int *test= new int ;
int n;
cin>>n;
int * test =new int [n];
可以实现动态分配内存,比c的malloc 简洁多了,

  同样也能new 一个 结构体。总之挺方便的。

new 之后 不用了 要用delet free 内存

另外对空指针delete 是安全的。

  模板类:vector,也是一种动态数组。

用法 vector<typename> vt {n_elem};

  模板类:array,不是动态滴~

用法 array<typename,n_elem> vt {};

C++的for循环多了一种新特性:可以基于范围。

for(double x:nums){

x=x*;
}

在for中  用于循环用的++i 和i++  前缀格式和后缀格式,前缀格式 就将值加一,然后返回。

但后缀版本会首先复制一个副本,将其加1,然后将其复制的副本返回。

但是经过我 ida 看汇编的结构,确是相反的,这个问题

main           proc near               ; CODE XREF: _main_0↑j
.text:
.text: var_D8 = byte ptr -0D8h
.text: j = dword ptr -14h
.text: i = dword ptr -
.text:
.text: push ebp
.text: mov ebp, esp
.text: sub esp, 0D8h
.text: push ebx
.text:0041492A push esi
.text:0041492B push edi
.text:0041492C lea edi, [ebp+var_D8]
.text: mov ecx, 36h
.text: mov eax, 0CCCCCCCCh
.text:0041493C rep stosd
.text:0041493E mov [ebp+i],
.text: jmp short loc_414950
.text: ; ---------------------------------------------------------------------------
.text:
.text: loc_414947: ; CODE XREF: _main+↓j
.text: mov eax, [ebp+i]
.text:0041494A add eax,
.text:0041494D mov [ebp+i], eax
.text:
.text: loc_414950: ; CODE XREF: _main+↑j
.text: cmp [ebp+i],
.text: jge short loc_414987
.text: mov esi, esp
.text: push offset j_??$endl@DU?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@@AAV10@@Z ; std::endl<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &)
.text:0041495D mov edi, esp
.text:0041495F mov eax, [ebp+i]
.text: push eax
.text: mov ecx, ds:__imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@@A.gap0 ; std::basic_ostream<char,std::char_traits<char>> std::cout
.text: call ds:__imp_???$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(int)
.text:0041496F cmp edi, esp
.text: call j___RTC_CheckEsp
.text: mov ecx, eax
.text: call ds:__imp_???$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(std::basic_ostream<char,std::char_traits<char>> & (*)(std::basic_ostream<char,std::char_traits<char>> &))
.text:0041497E cmp esi, esp
.text: call j___RTC_CheckEsp
.text: jmp short loc_414947
.text: ; ---------------------------------------------------------------------------
.text:
.text: loc_414987: ; CODE XREF: _main+↑j
.text: mov [ebp+j],
.text:0041498E jmp short loc_414999
.text: ; ---------------------------------------------------------------------------
.text:
.text: loc_414990: ; CODE XREF: _main+AE↓j
.text: mov eax, [ebp+j]
.text: add eax,
.text: mov [ebp+j], eax
.text:
.text: loc_414999: ; CODE XREF: _main+6E↑j
.text: cmp [ebp+j],
.text:0041499D jge short loc_4149D0
.text:0041499F mov esi, esp
.text:004149A1 push offset j_??$endl@DU?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@@AAV10@@Z ; std::endl<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &)
.text:004149A6 mov edi, esp
.text:004149A8 mov eax, [ebp+j]
.text:004149AB push eax
.text:004149AC mov ecx, ds:__imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@@A.gap0 ; std::basic_ostream<char,std::char_traits<char>> std::cout
.text:004149B2 call ds:__imp_???$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(int)
.text:004149B8 cmp edi, esp
.text:004149BA call j___RTC_CheckEsp
.text:004149BF mov ecx, eax
.text:004149C1 call ds:__imp_???$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(std::basic_ostream<char,std::char_traits<char>> & (*)(std::basic_ostream<char,std::char_traits<char>> &))
.text:004149C7 cmp esi, esp
.text:004149C9 call j___RTC_CheckEsp
.text:004149CE jmp short loc_414990
for (i = ; i < ; i++) {
cout << i << endl;
}
for (j = ; j < ; ++j) {
cout << j << endl;
}

恰恰相反。

const 这个标志符的作用也蛮大的,可以防止数据被修改,但是如果是一个指针指向一个变量,这个指针用了const,这样这个指针就不能修改这个数据,但是还是可以通过变量名字修改。

比较有趣的是函数指针,int (*pd)(int ); 可以直接把指针指向函数名就能执行了。用tpyedef 也能定义。挺有趣的。

今天在leetcode 做一道题的时候,遇到了一个问题:

  

runtime error: member access within null pointer of type 'struct ListNode'
while(l1!=NULL||l2!=NULL){
sum=;
if(l1->next!=NULL) {
y=l1->val;l1=l1->next;
}
if(l2->next!=NULL) {
y=l2->val;
l2=l2->next;
}

我就用了这种方法,后来想了想,看了下别人的,发现这个错误在哪里了,如果l1 或者l2 有一个已经为NULL的时候,这时还能进入while中,但是如果 (l1->next或者l2->next)的时候,那个已经为空的指针就会访问到,但是他是NULL NULL并没有->next利用引用,因为他不是ListNode 结构体。

今天也了解到 hashmap,hashmap 在遍历里面的元素时所用的时间复杂度为O(1);这样在某些题目中可以用空间获取时间来获得最优解。

 Map<Integer,Integer> map = new HashMap<>();

map 有不少内置的方法可以使用,还不错。

C++学习第二天(打卡)的更多相关文章

  1. 深度学习多机多卡解决方案-purine

    未经允许请不要转载,原作者:zhxfl,http://www.cnblogs.com/zhxfl/p/5287644.html 目录: 一.简介 二.环境配置 三.运行demo 四.硬件配置建议 五. ...

  2. 前端学习 第二弹: JavaScript中的一些函数与对象(1)

    前端学习 第二弹: JavaScript中的一些函数与对象(1) 1.apply与call函数 每个函数都包含两个非继承而来的方法:apply()和call(). 他们的用途相同,都是在特定的作用域中 ...

  3. 二、Android学习第二天——初识Activity(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...

  4. python学习第二讲,pythonIDE介绍以及配置使用

    目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...

  5. python学习第二次笔记

    python学习第二次记录 1.格式化输出 name = input('请输入姓名') age = input('请输入年龄') height = input('请输入身高') msg = " ...

  6. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】

    [中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...

  7. Learning ROS for Robotics Programming - Second Edition(《ROS机器人编程学习-第二版》)

    Learning ROS for Robotics Programming - Second Edition <ROS机器人编程学习-第二版> ----Your one-stop guid ...

  8. 201671010140. 2016-2017-2 《Java程序设计》java学习第二周

                                 学习第二周(Java基本程序设计结构)      这一周,着重学习了Java的简单程序设计实现及运行,通过自己操作,发现Java的程序语法大面 ...

  9. oracle学习 第二章 限制性查询和数据的排序 ——03

    这里.我们接着上一小节2.6留下的问题:假设要查询的字符串中含有"_"或"%".又该如何处理呢? 開始今天的学习. 2.7  怎样使用转义(escape)操作符 ...

  10. Python学习-第二天-字符串和常用数据结构

    Python学习-第二天-字符串和常用数据结构 字符串的基本操作 def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1 ...

随机推荐

  1. Java根据参数返回相应类

    问题初衷:如何根据参数变换方法的返回类型(参数为 类) 解决方案: 下面方法是放在工具类(例:YslRequestUtil) public <T> T response(Object re ...

  2. 使用 Django 项目中的 ORM 编写伪造测试数据脚本

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 为了防止博客首页展示的文章过多以及提升加载速度,可以对文章列表进行分页展示.不过这需 ...

  3. 设计模式(九)Bridge模式

    Bridge模式就是将类的功能层次结构和类的实现层次结构连接起来. 类的功能层次结构就是根据实际非抽象类来说的,也就是父类具有基本功能,然后在子类中增加新功能.用于增加新功能. 类的实现层次结构就是根 ...

  4. Dotween 应用

    dotween是做缓动比较简单实用的插件,下面就使用经验进行浅谈 1)通用方法:如下图官网截图所示,如果看不懂可以跳过,这是一个通用方法,前两个参数为委托类型,可以用lambda表达式,也可以直接写成 ...

  5. JVM三部曲之运行时数据区 (第一部)

    在接下来的几天想总结下,JVM相关的一些内容,比如下面的这三个内容算是比较核心知识点了 1.运行时数据区域: 在运行时数据区里存储类Class文件元数据(方法区),对象和数组(堆),方法参数局部变量( ...

  6. vue之页面缓存问题(基于2.0)

    为什么会有这篇文章 在vue2.0中出现了列表页面是每次都重新加载数据,但是详情页面却只在第一次加载的时候调用数据,如果返回到列表再进入详情那么页面是不会重新渲染页面. 1 用vue-router 重 ...

  7. Android H5混合开发(4):构建Cordova Jar包

    前言 上一节,介绍了原生项目如何嵌入Cordova,我们对Cordova的依赖使用的是CordovaLib Module,这也是安卓项目常用的方式. 但是,也有项目希望以Jar包的方式依赖Cordov ...

  8. SpringCloud 中集成Sentinel+Feign实现服务熔断降级

    Sentine 1.背景 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来帮助用户保护服务的稳 ...

  9. Nginx 的请求处理流程,你了解吗?

    之前我们已经讲解了 Nginx 的基础内容,接下来我们开始介绍 Nginx 的架构基础. 为什么我们要讨论 Nginx 的架构基础? 因为 Nginx 运行在企业内网的最外层也就是边缘节点,那么他处理 ...

  10. CSPS模拟 94

    以后干脆不要在准备提交的代码里放调试信息. 再也不忘删printf可是memset还是看不见... T1 玄学错误,不想研究.skyh帮我研究出来了.HACKDATA:1 1 T2 傻逼做法. 发现一 ...