C++相關概念和易錯語法(14)(初始化注意事項、vector、編譯器向上查找規則)

1.當我們在代碼中想要終止運行的話,我們可以采用Ctrl + C或Ctrl + Z,其中^C代表殺進程,^Z設置結束

2.編碼表:我們目前比較熟悉的是ASCII碼編碼方式,但是我們發現平時使用的漢字無法通過ASCII編碼,除此之外,世界上各個國家的文字都需要編碼,因此Unicode統一碼(萬國碼)被研發出來了,它針對世界上各個國家的語言采用不同的編碼方式,其中最常見的就是UTF-8,它針對不同的語言符號有不同長度的編碼,從1個字節到4個字節不等UTF-16編碼長度固定為2個字節或4個字節,而UTF-32是以固定長度4個字節的編碼來表示語言符號的,它們在存儲上要消耗更大的空間,同時也能表示出更多符號,但UTF-8基本上能表示常見的字符了,因此一般使用UTF-8。

在string頭文件里我們也可以看到專門針對不同存儲方式的string,但是平時幾乎不使用,了解即可。

在我們國家,為了進一步表示一些字體,我們自己研發了GBK編碼方式,它在某種程度上比UTF-8表示中文更豐富。目前在Windows下大多采用的就是GBK編碼。

3.整型家族在static修飾的下可在聲明處定義

但注意僅限于整型家族,如flaot、double等都不支持這種寫法,都只能聲明和定義分離

4.初始化注意事項

由于new初始化方式比較易混,這里總結了一些常見的易混點,正常情況下別亂用

多參數易混點:

單參數易混點:

這里注意,只要開辟空間的形式是數組,那么不管開幾個空間,都會遵循數組的初始化規則

在其余初始化場景,也遵循上面的初始化規則

其中有幾種寫法很易混,最好不要這樣去寫

可以看到b和d的初始化內部被識別為initializer list,而a和c這樣的單參數卻不會被識別,要多加注意。

同時注意逗號表達式的()可以嵌套,只要滿足上面的初始化規則,就可以這樣寫

5.vector基本理解

在接觸了string之后,我們對每個容器的框架都有了一個基本的認識,因此其余容器的學習就會輕松一些。?

(1)vector相當于我們之前接觸過的順序表,是對連續的數據進行存儲,這個數據可以是任意類型,但是不支持int、double等存到同一個vector里,因為vector的實現涉及模板template,需要顯式實例化,如果出現多種類型會發生推理沖突。空間配置器是vector模板聲明第二個參數,涉及內存池,有缺省值,我們不用太在意。

(2)string和vector<char>差距很大,string可以一次性加入一個串,而vector<char>只能單獨加字符,string不管怎么操作,數據最后一定有個\0,而vector尾插不會有這個功能,需要自己去處理\0的情況,很不方便。同時,vector<char>也缺少一些必要的接口,如c_str。

但vector和string很多接口相似,訪問都可以用下標+[],迭代器,范圍for(本質也是迭代器)

因此我們可知,string是專門針對字符數組的需求設計的,而vector是廣泛適應的,vector不能替代string,需要根據不同的場景有不同的選擇。

(3)初始化

(4)迭代器和string的沒有任何使用區別

(5)訪問和string的沒有任何使用區別

front和back的返回值和operator[]一樣,但注意back返回的不是最后一個元素的下一個位置,而是最后一個元素的位置,這里要和end迭代器做區分

(6)容量相關接口和string的沒有任何使用區別

唯一需要注意的是resize和reserve

resize不僅會擴容,還會填充開辟空間的值,注意缺省值

reserve只開辟空間(可能開辟的最終空間比n多),不做任何處理。

注意最好不要縮容,不同編譯器會有不同處理方式,比如msvc下,reserve很多情況下不會縮容,resize會縮容,但在g++下,都會縮容。

(7)在有的接口上,vector就和string有不同之處了,主要體現在參數的傳遞上


我們發現,vector下的接口要簡潔很多,多個數據的插入和刪除都是通過迭代器來控制的。

6.編譯器向上查找規則

當我們調用函數的時候,編譯器會從函數調用處向上查找該函數,如果沒有相關聲明或定義會報錯。那么下面這種情況是什么導致的呢?

很多人會認為是因為test.h中沒有展開std導致cout和endl不能使用,但是下面這種情況呢?

我們依然需要用向上查找來解釋。

.h文件在預處理階段就會展開,因此.h不存在編譯鏈接的情況,所以根據“.h中沒有展開std導致cout和endl不能使用”完全是錯誤的。在.h展開后,在調用test()時,需要向上查找cout,但是cout是在std命名空間里的,所以需要展開命名空間才能正常訪問。

圖1展開命名空間的語句在展開頭文件的下面,因此在向上查找的情況下,并不會讀取using namespace std,也就不會在std命名空間里找,所以找不到。

而圖2展開命名空間的語句在展開頭文件的上面,因此查找的時候會到std命名空間里找。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13969.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13969.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13969.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端canvas項目實戰——在線圖文編輯器:序

目錄 前言一、 博主是誰&#xff1f;二、 關于本專欄1. 本專欄涉及的技術棧2. 專欄適合誰來學習&#xff1f;3. 你可以從專欄學到什么&#xff1f;4. 系列文章索引 三、 付費信息后記 前言 很高興&#xff0c;今天我又為自己設定了一個目標&#xff1a;帶領大家從入門HTML5中的…

自動化測試用例結構

標準的用例結構&#xff1a; 用力標題前提條件用例步驟預期結果實際結果 測試用例對比&#xff1a;

酷開系統 | 酷開科技把握智慧先機 AI賦能家庭場景

智慧化是當今世界科技發展的前沿領域之一。現在的智慧化&#xff0c;也正在逐步成為我們日常生活的一部分。電視系統也進入了數字化時代&#xff0c;AI的應用正在不斷擴展&#xff0c;其潛力似乎無窮無盡。 酷開科技深耕人工智能技術&#xff0c;在提升語音體驗、強化智能家居…

(1)無線電失控保護(二)

文章目錄 前言 4 參數配置 5 測試 6 使用接收器設置飛行模式(

第二證券:新股申購配號數什么意思?

股配號數量便是我們參與抽簽的數量&#xff0c;投資者申購新股之后&#xff0c;交易所會根據持有的股票市值進行配號。 投資者的市值越大&#xff0c;申購新股的配號越多&#xff0c;其中簽機會越大。主板、創業板、科創板一個申購單位是500股&#xff0c;意味著1萬元的市值有…

Scrapy 從創建到運行

Scrapy是一個強大的Python框架&#xff0c;專門用于構建網絡爬蟲。 步驟1&#xff1a;安裝Scrapy 首先&#xff0c;你需要安裝Scrapy框架來進行后續操作。以下是具體操作步驟&#xff1a; 1、使用pip命令安裝Scrapy&#xff1a; pip install scrapy 步驟2&#xff1a;創建S…

Java 定義類型處理MySQL point類型數據

1.三個類來處理 引入maven依賴 <!-- 引入 jts 庫解析 POINT --><dependency><groupId>com.vividsolutions</groupId><artifactId>jts</artifactId><version>1.13</version></dependency>import javax.validation.constr…

MySQL的數據類型之文本類型

目錄 文本類型類型&#xff1a; CHAR(size) VARCHAR(size) TEXT TINYTEXT, MEDIUMTEXT, LONGTEXT BLOB, MEDIUMBLOB, LONGBLOB ENUM 在mysql中&#xff0c;常用數據類型有三種&#xff1a; 1、文本類型&#xff1b; 2、數字類型&#xff1b; 3、日期/時間類型&#xff1b; …

【C++入門】—— C++入門 (下)_內聯函數

前言&#xff1a;在了解完前面的C基礎內容后&#xff0c;馬上我們就要真正不如C的學習了&#xff0c;但在之前讓我們最后了解最后一點點C入門知識&#xff01;來遲的520特別篇&#xff01; 本篇主要內容&#xff1a; 內聯函數 auto關鍵字 范圍for 指針空值nullptr C入門 1. 內聯…

星戈瑞CY3-COOH染料的穩定性、熒光特性

CY3-COOH染料&#xff0c;作為一種多功能的熒光標記試劑&#xff0c;在生物醫學研究和熒光成像技術中應用。其穩定性和熒光特性使得它在科研實驗使用。 CY3-COOH染料的穩定性 CY3-COOH染料以其穩定性而應用。首先&#xff0c;它展現出了良好的化學穩定性&#xff0c;不易受到環…

智慧醫療時代:探索互聯網醫院開發的新篇章

在智慧醫療時代&#xff0c;互聯網醫院開發正引領著醫療服務的創新浪潮。通過將先進的技術與醫療服務相結合&#xff0c;互聯網醫院為患者和醫生提供了全新的互動方式&#xff0c;極大地提升了醫療服務的便捷性和效率。本文將深入探討互聯網醫院的開發&#xff0c;介紹其技術實…

一鍵部署!QQ AI 聊天機器人!支持ChatGPT、文心一言、訊飛星火、Bing、Bard、ChatGLM、POE,多賬號,人設調教

隨著人工智能技術的不斷發展&#xff0c;智能聊天機器人已經成為我們日常生活中不可或缺的一部分。ChatGPT作為一款強大的人工智能聊天模型&#xff0c;能夠為我們提供高效、便捷的聊天體驗。那么&#xff0c;如何將ChatGPT接入QQ&#xff0c;實現智能聊天新體驗呢&#xff1f;…

關于Git 的基本概念和使用方式

Git是一個分布式版本控制系統&#xff0c;用于跟蹤和管理代碼的改動。它具有以下基本概念和使用方式&#xff1a; 1. 倉庫&#xff08;Repository&#xff09;&#xff1a;Git使用倉庫來存儲代碼和相關的歷史記錄。倉庫可以是本地的&#xff0c;也可以是遠程的。本地倉庫保存在…

DB2學習筆記--1

一 數據控制語言(DCL) 1.GRANT語句 使用 GRANT 語句可以向單個用戶或組顯式授予權限和特權&#xff0c;授權對象包括數據庫、 表空間、表、視圖、索引、包和模式。 GRANT 的語法如下: GRANT privilege ON object-type object-name TO {USER|GROUP|PUBLIC} authorization-na…

OTP8腳-全自動擦鞋機WTN6020-低成本語音方案

一&#xff0c;產品開發背景 首先&#xff0c;隨著人們生活質量的提升&#xff0c;對鞋子的保養需求也日益增加。鞋子作為人們日常穿著的重要組成部分&#xff0c;其清潔度和外觀狀態直接影響到個人形象和舒適度。因此&#xff0c;一種能夠自動清潔和擦亮鞋子的設備應運而生&am…

局部直方圖均衡化去霧算法

目錄 1. 引言 2. 算法流程 3. 代碼 4. 去霧效果 1. 引言 局部直方圖算法是一種基于塊的圖像去霧方法&#xff0c;它將圖像分割為若干個塊&#xff0c;并在每個塊內計算塊的局部直方圖。通過對各個塊的直方圖進行分析和處理&#xff0c;該算法能夠更好地適應圖像中不同區域的…

正點原子[第二期]Linux之ARM(MX6U)裸機篇學習筆記-16講 EPIT定時器

前言&#xff1a; 本文是根據嗶哩嗶哩網站上“正點原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸機篇”視頻的學習筆記&#xff0c;在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了正點原子教學視頻和鏈接中的內容。…

js是單線程還是多線程,為什么是線程而不是進程

JavaScript 在瀏覽器環境中主要是單線程的&#xff0c;而在 Node.js 環境中&#xff0c;雖然 JavaScript 代碼本身仍然是在單線程中執行的&#xff0c;但 Node.js 底層利用了多線程來處理 I/O 操作等異步任務。 下面我會解釋為什么 JavaScript 在瀏覽器環境中主要是單線程&…

再談Google I/O 2024:開發者必看亮點

在2024年Google I/O大會上&#xff0c;谷歌發布了許多令人興奮的新技術和工具。本文將重點介紹其中的三大亮點&#xff1a;新一代TPU、Gemma模型以及Firebase GenKit。這些工具和技術對于開發者來說&#xff0c;將會帶來前所未有的便利和強大功能。 新一代TPU&#xff1a;Tril…

centOS7.9 DNS配置

1.DNS規劃 dns.sohu.com192.168.110.111Awww.sohucom192.168.110.112Aoa.sohu.com 192.168.110.113A 2.安裝 bind yum install -y bind bind-utils 3. 編輯主配置文件 vim /etc/named.conflisten- on port 53 { any; }; allow- query { any; }; 4.配置區域文件 …