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. linux 下ln命令--笔记

    linux 下ln命令 ln命令用来为文件创建连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接.如果要创建符号连接必须使用"-s"选项.注意:符号链接文件不是一个独立 ...

  2. 总结Java equals()和hashCode()的联系

    Java equals()和hashCode()的联系 如果两个对象是相等的,那么它们必须有相同的哈希码. 如果两个对象具有相同的哈希码,他们可能相等,可能不相等. 如果两个对象是不同的类的实例 他们 ...

  3. HTTP协议与使用Python获取数据并写入MySQL

    一.Http协议 二.Https协议 三.使用Python获取数据 (1)urlib (2)GET请求 (3)POST请求 四.爬取豆瓣电影实战 1.思路 (1)在浏览器中输入https://movi ...

  4. NetworkManager网络通讯_NetworkLobbyManager(三)

    此部分可以先建立游戏大厅,然后进入游戏,此处坑甚多耗费大量时间.国内百度出来的基本没靠谱的,一些专栏作家大V也不过是基本翻译了一下用户手册(坑啊),只能通过看youtube视频以及不停的翻阅用户手册解 ...

  5. fenby C语言 P29

    野指针 malloc()分配内存: free()释放内存: p=(char*)malloc(100): #include <stdio.h>#include <stdlib.h> ...

  6. vue运行报错error:Cannot assign to read only property 'exports' of object '#<Object>'

    用weex做项目的时候,npm start 之后一直报错error:Cannot assign to read only property 'exports' of object '#<Obje ...

  7. Mustache 入门教程

    Mustache 简介: Mustache 是一个轻逻辑模板解析引擎,它的优势在于可以应用在 Javascript.PHP.Python.Perl 等多种编程语言中. Mustache 语法: Mus ...

  8. CSPS模拟 58

    爆炸 没算内存见祖宗 为什么偏偏这次卡内存我没算 T1 HashMap各种水 T2 智障背包!但是卡内存! T3 Dashspeed 考试用点分治+线段树水到了80 实际上是个没见过的套路题 在之前的 ...

  9. NOIP模拟测试8反思

    被动态逆序对戏耍,来写博客这次考试油炸了 模板爆零,哈希调半天导致T3没时间,我都干了些什么&_& T3思路: 利用环的性质先拼成一条链,然后二分边界. 证明就不说啦(其实是我不会) ...

  10. 部署https并自动续期

    1.其它步骤参考地址https://blog.csdn.net/achenyuan/article/details/79021340https://blog.csdn.net/Dancen/artic ...