C++:34---union:聯合/共用體,一種節省空間的類

一、聯合(union)概述

  • 聯合(union)是一種特殊的類

  • 一個union可以有多個數據成員,但是在任意時刻只有一個數據成員可以有值。當我們給union的某個成員賦值之后,該union的其它成員就變成未定義的狀態了。分配給一個union對象的存儲空間至少要能容納它的最大的數據成員

  • 類的某些特性對union同樣適用,但并非所有特性都如此:

    • union不能含有引用類型的成員,union的成員可以是絕大多數類型。在C++11標準中,含有構造函數或析構函數的類類型也可以作為union的成員類型

    • union可以為其成員指定public、protected、private等標記。默認情況下union的成員都是公有的

    • union可以定義包括構造函數和析構函數在內的成員函數。但是由于union既不能繼承自其它類,也不能作為基類使用,所以在union中不能含有虛函數

二、定義union

  • union提供了一種有效的途徑使得我們可以方便地表示一組類型不同的互斥值

  • 例如我們需要處理一些不同類型的數字數據和字符數據,則在此過程中可以定義一個union來保存這些值:

//Token類型的對象只有一個成員,該成員的類型可能是下列類型中的任意一種union Token {char cval;int ival;double dval;};

三、使用union類型

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

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

相關文章

leetcode205. 同構字符串 一般人一次做不對的簡單題

給定兩個字符串 s 和 t,判斷它們是否是同構的。 如果 s 中的字符可以被替換得到 t ,那么這兩個字符串是同構的。 所有出現的字符都必須用另一個字符替換,同時保留字符的順序。兩個字符不能映射到同一個字符上,但字符可以映射自己…

C++:32---IO庫

一、IO庫 I0庫類型和頭文件頭文件類型iostreamistream,wistream從流讀取數據ostream,wostream向流寫入數據iostream,wiostream讀寫流fstreamifstream,wifstream從文件讀取數據ofstream,wofstream向文件寫入數據fstream,wfstream讀寫文件sstreamistringstream,wistringst

leetcode209. 長度最小的子數組 借這個題規范一下雙指針寫法

給定一個含有 n 個正整數的數組和一個正整數 s ,找出該數組中滿足其和 ≥ s 的長度最小的連續子數組。如果不存在符合條件的連續子數組,返回 0。 示例: 輸入: s 7, nums [2,3,1,2,4,3] 輸出: 2 解釋: 子數組 [4,3] 是該條件下的長度最小的連續子數組…

C++(STL):01---pair容器

一、pair歷史概述 C++標準庫的第1版(C++98),提供了一個簡單的class,用來處理類型不同的兩個(一對)值,這個就是pair。到了C++11,pair被重新定義,有了很大擴展pair與tuple:tuple在TR1被引入,它是對pair的擴展tuple在后面詳細概述。二、pair概述 特點: 一個pair保存兩…

C++(STL):02---tuple容器

一、tuple的歷史概述 Tuple是TR1引入的東西,它擴展了pair的概念,擁有任意數量的元素。在C++11標準之前,tuple最多帶有10個類型不同的元素C++11,tuple被重新定義,采用variadic template概念,被設計為可用于任意大小的異質集合二、tuple概述 tuple與pair類似,也是一個模板…

C++(STL):06---數值的極值(numeric_limits類)

一、數值的極值概述 數值類型有著與平臺相依的極值C++標準規定了各種類型必須保證的最小精度。這些最小值如下圖所示: 類型最小長度char1byte(8bits)shortint2bytesint2byteslongint4bytes

leetocde 225. 用隊列實現棧

使用隊列實現棧的下列操作: push(x) -- 元素 x 入棧 pop() -- 移除棧頂元素 top() -- 獲取棧頂元素 empty() -- 返回棧是否為空 注意: 你只能使用隊列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 這些操作是合法的。 你所使用的語…

C++(STL):03---智能指針之shared_ptr

一、shared_ptr類 頭文件:#include<memory>智能指針,是一個模板。創建智能指針時,必須提供指針所指的類型如果當做前提條件判斷,則是檢測其是否為空shared_ptr<string> p1; //指向string shared_ptr<list<int>> p2;//指向int的list if(p1 &&…

C++(STL):05---智能指針之unique_ptr

一、unique_ptr類 頭文件:#include<memory>智能指針,是一個模板。創建智能指針時,必須提供指針所指的類型與shared_ptr的不同之處: shared_ptr所指向的對象可以有多個其他shared_ptr智能指針而unique_ptr所指向的對象只能有一個unique_ptr指針,也就是自己。當unique…

JAVA中int、String的類型轉換

int -> String int i12345; String s""; 第一種方法&#xff1a;si""; 第二種方法&#xff1a;sString.valueOf(i); 這兩種方法有什么區別呢&#xff1f;作用是不是一樣的呢&#xff1f;是不是在任何下都能互換呢&#xff1f; String -> int s"…

leetcode 231. 2的冪

給定一個整數&#xff0c;編寫一個函數來判斷它是否是 2 的冪次方。 示例 1: 輸入: 1 輸出: true 解釋: 20 1 示例 2: 輸入: 16 輸出: true 解釋: 24 16 示例 3: 輸入: 218 輸出: false 本題思路轉載位運算的常用技巧&#xff1a;lowbit運算&#xff0c;包含lowbit公式、…

C++(STL):04---智能指針之weak_ptr

一、概念weak_ptr是一種不控制所指向對象生存期的智能指針&#xff0c;它指向一個shared_ptr管理的對象擁有“弱”共享的特點最重要的特點一個對象被多個shared_ptr類所指向時&#xff0c;就會擁有多個引用計數但是當weak_ptr指向一個shared_ptr類所指向的對象時&#xff0c;該…

C語言: const關鍵字與指針

const修飾指針的4種形式 const關鍵字,在C語言中用來修飾變量,表示這個變量是常量。const修飾指針有4種形式,區分清楚這4種即可全部理解const和指針。第一種:const int *p;第二種:int const *p;第三種:int * const p;第四種:const int * const p;ation ‘*p4’ // 第一種…

leetcode268. 缺失數字

給定一個包含 0, 1, 2, ..., n 中 n 個數的序列&#xff0c;找出 0 .. n 中沒有出現在序列中的那個數。 示例 1: 輸入: [3,0,1] 輸出: 2 示例 2: 輸入: [9,6,4,2,3,5,7,0,1] 輸出: 8 說明: 你的算法應具有線性時間復雜度。你能否僅使用額外常數空間來實現? 眾所周知&#…

C++(STL):07---vector之使用方式和常規用法

簡單兩三句話說下vector(一般領導講話都說簡單說兩句,結果說了一個鐘頭): 介紹 vector是表示可變大小數組的序列容器。就像數組一樣,vector也采用的連續存儲空間來存儲元素。也就是意味著可以采用下標對vector的元素進行訪問,和數組一樣高效。但是又不像數組,它的大小是…

leetcode276. 柵欄涂色

有 k 種顏色的涂料和一個包含 n 個柵欄柱的柵欄&#xff0c;每個柵欄柱可以用其中一種顏色進行上色。 你需要給所有柵欄柱上色&#xff0c;并且保證其中相鄰的柵欄柱 最多連續兩個 顏色相同。然后&#xff0c;返回所有有效涂色的方案數。 注意: n 和 k 均為非負的整數。 示例…

C++(STL):11---vector源碼剖析

一、vector概述 vector的使用語法可以參考文章之前的幾篇文章,總的來說:vector是可變大小數組特點:支持快速隨機訪問。在尾部之外的位置插入或刪除元素可能很慢元素保存在連續的內存空間中,因此通過下標取值非常快在容器中間位置添加或刪除元素非常耗時一旦vector內存不足,…

C++(STL):09---vector迭代器失效問題

在vector中,我們經常會使用迭代器iterator對vector中的元素進行索引,也經常需要將迭代器作為參數傳遞到vector的成員函數中,迭代器使用非常方便,但使用不當也會給我們帶來巨大的麻煩,下面就深入分析vector迭代器失效的場景 push_back導致迭代器失效 Release模式下能正常…

leetcode278. 第一個錯誤的版本

你是產品經理&#xff0c;目前正在帶領一個團隊開發新的產品。不幸的是&#xff0c;你的產品的最新版本沒有通過質量檢測。由于每個版本都是基于之前的版本開發的&#xff0c;所以錯誤的版本之后的所有版本都是錯的。 假設你有 n 個版本 [1, 2, ..., n]&#xff0c;你想找出導…

C++(STL):08---vector元素訪問

本文將給大家帶來分享:vector中訪問元素和迭代器失效問題,這兩部分是在日常工作開發中經常遇到,也是容易犯錯的地方,同時也是在面試過程中經常被問到的。 1.訪問vector容器中單個元素 首先,vector 容器可以向普通數組那樣訪問存儲的元素,甚至對指定下標處的元素進行修改,…