C++学习第二天(打卡)
C++ new 可以很方便的 分配一段內(nèi)存。
比如 int *test= new int ;int n;cin>>n;int * test =new int [n]; 可以實(shí)現(xiàn)動(dòng)態(tài)分配內(nèi)存,比c的malloc 簡(jiǎn)潔多了,?
同樣也能new 一個(gè) 結(jié)構(gòu)體。總之挺方便的。
new 之后 不用了 要用delet free 內(nèi)存
另外對(duì)空指針delete 是安全的。
模板類:vector,也是一種動(dòng)態(tài)數(shù)組。
?用法 vector<typename> vt {n_elem};
模板類:array,不是動(dòng)態(tài)滴~
用法 array<typename,n_elem> vt {};
?
C++的for循環(huán)多了一種新特性:可以基于范圍。
for(double x:nums){x=x*100; }在for中? 用于循環(huán)用的++i 和i++? 前綴格式和后綴格式,前綴格式 就將值加一,然后返回。
但后綴版本會(huì)首先復(fù)制一個(gè)副本,將其加1,然后將其復(fù)制的副本返回。
但是經(jīng)過(guò)我 ida 看匯編的結(jié)構(gòu),確是相反的,這個(gè)問題?
main proc near ; CODE XREF: _main_0↑j .text:00414920 .text:00414920 var_D8 = byte ptr -0D8h .text:00414920 j = dword ptr -14h .text:00414920 i = dword ptr -8 .text:00414920 .text:00414920 push ebp .text:00414921 mov ebp, esp .text:00414923 sub esp, 0D8h .text:00414929 push ebx .text:0041492A push esi .text:0041492B push edi .text:0041492C lea edi, [ebp+var_D8] .text:00414932 mov ecx, 36h .text:00414937 mov eax, 0CCCCCCCCh .text:0041493C rep stosd .text:0041493E mov [ebp+i], 0 .text:00414945 jmp short loc_414950 .text:00414947 ; --------------------------------------------------------------------------- .text:00414947 .text:00414947 loc_414947: ; CODE XREF: _main+65↓j .text:00414947 mov eax, [ebp+i] .text:0041494A add eax, 1 .text:0041494D mov [ebp+i], eax .text:00414950 .text:00414950 loc_414950: ; CODE XREF: _main+25↑j .text:00414950 cmp [ebp+i], 5 .text:00414954 jge short loc_414987 .text:00414956 mov esi, esp .text:00414958 push offset j_??$endl@DU?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@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:00414962 push eax .text:00414963 mov ecx, ds:__imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A.gap0 ; std::basic_ostream<char,std::char_traits<char>> std::cout .text:00414969 call ds:__imp_??6?$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:00414971 call j___RTC_CheckEsp .text:00414976 mov ecx, eax .text:00414978 call ds:__imp_??6?$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:00414980 call j___RTC_CheckEsp .text:00414985 jmp short loc_414947 .text:00414987 ; --------------------------------------------------------------------------- .text:00414987 .text:00414987 loc_414987: ; CODE XREF: _main+34↑j .text:00414987 mov [ebp+j], 0 .text:0041498E jmp short loc_414999 .text:00414990 ; --------------------------------------------------------------------------- .text:00414990 .text:00414990 loc_414990: ; CODE XREF: _main+AE↓j .text:00414990 mov eax, [ebp+j] .text:00414993 add eax, 1 .text:00414996 mov [ebp+j], eax .text:00414999 .text:00414999 loc_414999: ; CODE XREF: _main+6E↑j .text:00414999 cmp [ebp+j], 5 .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@@@0@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@@@1@A.gap0 ; std::basic_ostream<char,std::char_traits<char>> std::cout .text:004149B2 call ds:__imp_??6?$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_??6?$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 = 0; i < 5; i++) {cout << i << endl;}for (j = 0; j < 5; ++j) {cout << j << endl;}恰恰相反。
const 這個(gè)標(biāo)志符的作用也蠻大的,可以防止數(shù)據(jù)被修改,但是如果是一個(gè)指針指向一個(gè)變量,這個(gè)指針用了const,這樣這個(gè)指針就不能修改這個(gè)數(shù)據(jù),但是還是可以通過(guò)變量名字修改。
比較有趣的是函數(shù)指針,int (*pd)(int ); 可以直接把指針指向函數(shù)名就能執(zhí)行了。用tpyedef 也能定義。挺有趣的。
?
今天在leetcode 做一道題的時(shí)候,遇到了一個(gè)問題:
runtime error: member access within null pointer of type 'struct ListNode' while(l1!=NULL||l2!=NULL){sum=0;if(l1->next!=NULL) {y=l1->val;l1=l1->next;}if(l2->next!=NULL) {y=l2->val;l2=l2->next;}
我就用了這種方法,后來(lái)想了想,看了下別人的,發(fā)現(xiàn)這個(gè)錯(cuò)誤在哪里了,如果l1 或者l2 有一個(gè)已經(jīng)為NULL的時(shí)候,這時(shí)還能進(jìn)入while中,但是如果 (l1->next或者l2->next)的時(shí)候,那個(gè)已經(jīng)為空的指針就會(huì)訪問到,但是他是NULL NULL并沒有->next利用引用,因?yàn)樗皇荓istNode 結(jié)構(gòu)體。
今天也了解到 hashmap,hashmap 在遍歷里面的元素時(shí)所用的時(shí)間復(fù)雜度為O(1);這樣在某些題目中可以用空間獲取時(shí)間來(lái)獲得最優(yōu)解。
Map<Integer,Integer> map = new HashMap<>();map 有不少內(nèi)置的方法可以使用,還不錯(cuò)。
轉(zhuǎn)載于:https://www.cnblogs.com/liyuechan/p/10933970.html
總結(jié)
以上是生活随笔為你收集整理的C++学习第二天(打卡)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stata15中文乱码_stata 14
- 下一篇: Cisco思科交换机路由器命令快速入门