程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++集合初始化基本概念概述

C++集合初始化基本概念概述

編輯:C++入門知識

C++編程語言中有很多比較重要的概念,需要我們不斷的去學習。比如今天為大家介紹的C++集合初始化的相關概念,就是一個比較重要的應用技術。那麼我們就一起來看看這方面的內容吧。

C++集合初始化往往既冗長又容易出錯。而C++中集合的初始化卻變得很方便而且很安全。當我們產生一個集合對像時,我們要做的只是指定初始值就行了,然後初始化工作就由編譯器去
承擔了。這種指定可以用幾種不同的風格,取決於我們正在處理的集合類型。但不管是哪種情況,指定的初值都要用大括號括起來。比如一個預定義類型的數組可以這樣定義:

  1. int a[5]={1,2,3,4,5}; 

如果給出的初始化值多於數組元素的個數,編譯器就會給出一條出錯信息。但如果給的初始化值少於數組元素的個數,那將會怎麼樣呢?例如:

  1. int b[6]={0}; 

這時,編譯器會把第一個初始化值賦給數組的第一個元素,然後用0賦給其余的元素。注意,如果我們定義了一個數組而沒有給出一列初始值時,編譯器並不會去做這些工作。所以上面的表達式是將一個數組初始化為零的簡潔方法,它不需要用一個f o r循環,也避免了“偏移1位”錯誤它可能比f o r循環更有效,這依賴於編譯器)。

數組還有一種叫自動計數的快速初始化方法,就是讓編譯器按初始化值的個數去決定數組的大小:

  1. int c[] = {1,2,3,4}; 

現在,如果我們決定增加其他的元素到這個數組上,只要增加一個初始化值即可,如果以此建立我們的代碼,只需在一處作出修改即可,這樣,我們在修改時出錯的機會就減少了。但怎樣確定這個數組的大小呢?用表達式sizeof c/sizeof *c(整個數組的大小除以第一個元素的大小)即可算出,這樣,當數組大小改變時它無需修改。

  1. for(int i = 0; i< sizeof c / sizeof *c; i++)  
  2. c [ i ] + + ; 

s t r u c t也是一種C++集合初始化類型,它們也可以用同樣的方式初始化。因為C風格的s t r u c t的所有成員都是公共型的,所以它們的值可以直接指定:

  1. struct X {  
  2. int i;  
  3. float f;  
  4. char c;  
  5. } ;  
  6. X x1 = {1,2.2,'c' }; 

如果我們有一個這種s t r u c t的數組,我們也可以用嵌套的大括號來初始化每一個對象。

  1. X x2[3] = {{1,1.1, 'a'},{2,2.2, 'b'}}; 

這裡,第三個對象被初始化為零。

如果s t r u c t中有私有成員,或即使所有成員都是公共成員,但有一個構造函數,情況就不一樣了。在上例中,初始值被直接賦給了集合中的每個元素,但構造函數是通過外在的接口
來強制初始化的。這裡,構造函數必須被調用來完成初始化,因此,如果有一個下面的s t r u c t類型:

  1. struct Y {  
  2. float f;  
  3. int i;  
  4. Y(int A); // presumably assigned to i  
  5. } ; 

我們必須指示構造函數調用,最好的方法像下面這樣:

  1. Y y2[] = {Y(1),Y(2),Y(3)}; 

這樣我們就得到了三個對象和進行了三次構造函數調用。只要有構造函數,無論是所有成員都是公共的s t r u c t還是一個帶私有成員的c l a s s ,所有的初始化工作都必須通過構造函數,即使
我們正在對一個C++集合初始化。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved