複合類型以及函數總結

                                                     複合類型

For循環的另一形式:
先定義一個函數,例如int p[100];然後for(auto a:p),:的左面定義一個變量,右邊則是數組的名字,這條語句的意思便是將p數組的所有的元素輸出來。作用就是可以在不知道數組的大小的時候將數組中所有的元素輸出。
指針:定義指針變量:指針的類型 指針名;使指針指向一個變量: 指針名=&變量名;變量的類型和指針的類型應該相同,此時*指針就相當與這個變量,例如 int *a=&m; *a=k;則是將k的值賦給m;另外還可以定義指向指針的指針:例如int**p=*a;
定義const指針:
1.coonst 類型 *指針;此時指針所指向的可以是一個整型變量,也可以是一個常變量,但不能通過這個指針來改變對應的變量的值,但是變量本身可以改變(不通過指針)。
2. 類型 const 指針;這種方式定義的指針地址只能是固定的不可以再進行改變。
3. .const 類型
const 指針:指針指向的內存不能改變,並且指針指向的值不能進行改變。動態對象:動態對象不像靜態對象,動態對象是沒有名字的,通過指針間接操作。 new 定義變量:int *p=new 動態對象的類型(其中動態對象的初始值);刪除時:delete 指針;定義數組:int *p=new int[100];刪除:delete [] 指針;定義指針:需要調用頭文件刪除之後的指針不可以在進行使用。
引用:
左值引用
&代表左值引用,左值引用的是表達式結束後仍存在的值,既是左值引用的必有地址,左值引用時可以引用變量,但變量必須先進行定義。例如 int a=1;int&p=a;
右值引用:
&&代表的是右值引用,右值引用可以引用表達式或者是具體的某個值,例如0;此類都是無法取址的,像例如a++是右值引用,而像++a則是左值引用。
結構體:
定義的方式:Struct 結構體名字 { 結構體成員 };切記最後有一個;。定義一個結構體變量直接可以 結構體名字 變量名。輸入輸出時要通過指針來輸出結構體中的各元素;例如:struct kl{ Int a; };輸出時則是cout<<kl.a;聯合: 聯合的定義方式與結構體相似,用union代替struct。但是聯合應用時只可使用一個成員。
枚舉: 定義時使用enum定義的是不限定作用域的枚舉,而enum class或enum struct定義的則是限定作用域的枚舉,限定作用域的優點是可以在不同的作用域內設定同樣的成員名字,而不限定作用域的枚舉則不能這樣。
定義時例如:enum light{red,green,yellow};默認的這三個的值是0,1,2;也可以自己設定枚舉中成員的值;例 enum light{red=2,green=6,yellow=88};枚舉的其中一個用處可以在switch中使用,case後面所跟得值也可以是枚舉定義的成員,從而更明瞭表示一種可能。
數組: 定義方式1 數組類型 數組名[數組大小];
2 數組類型 數組名[]={數組中元素};
3 char 數組名[]=”字符串”;
數組包括的元素爲字符串中的字符和最後一個元素\0;切記一個數組不可以被另一個數組初始化。多爲數組的初始化也可以,類似於一維數組的初始化方式。通過for語句和數組元素的下標訪問數組元素時可以定義下標爲size_t類型,然後通過for循環的方式訪問數組中的所有元素。for(int e:數組名)這種方式來訪問數組中的所有元素,若要改變數組中所有的元素需將語句修改爲for(int &e:數組名)。也可以通過指針來訪問數組的元素,定義數組的時候數組名的地址自定義爲數組中第一個元素的地址,則訪問數組的所有元素時可以通過for(int p=a;p<p+10;p++)
{ Cout<<*p; }
decltype關鍵字可以提取變量的類型來定義另一個變量的類型,
例:int a; decltype(a) l;這樣l的類型就和a的類型是相同的。
也可以通過迭代器來訪問數組中的每一個元素。頭文件是,有兩個關鍵詞,begin(),end(),括號內是數組名。
字符串
Char類型的字符串在頭文件有幾個函數,
strlen()返回字符串的長度。Strcmp(p1,p2)判斷p1,p2的關係,若等於則返回0,大於則返回正值,小於則返回負值。
Strcat(p1,p2)將後者附加到前者後面,並返回前者的值。
Strcpy(p1,p2)將後者複製到前者後面,並返回前者的值。
String:頭文件。定義:string n;若是定義相同的多個元素組成的字符串,則可以string l(n,’l’);函數:getline(is,s)通過輸入流把其中的一行輸入到s中。
s.empty()判斷字符串s 是否爲空。s.size();返回s中字符個數。
s.c.str() 將字符串轉換爲字符數組。string類的變量比較是通過字典序進行比較。相加則是將後者連接在前者之後。訪問string類的變量,可以通過變量名[下標]來訪問,字符串中元素以0爲第一個字符的位置,最終以’\0’結尾。
vector:
定義:vector<容器中的數據類型>變量名;
vectorv1(v2);v1中的成員與v2的成員相同。
vectorv(n,l);v中的成員是n個同樣的l。
vectorv=v1;v相當於v1.
vectorv={m,n,b,n,m};v中的成員是大括號中成員。
函數:
Empty() 判斷容器是否爲空是則返回true否則返回false
Size() 容器中元素數量 push_back() 向容器尾端中添加元素
pop_back() 刪除容器尾端中的元素
v={a,b,c} 用大括號中的元素代替vector中的元素
v.at(n) 在範圍內返回值與v[n]相同,範圍值外會報錯
不可以通過v[n]這種方式向vector中添加元素。
迭代器:
例如一個vector的變量v,在用迭代器訪問所有元素
vector::iterator it;
for(it=v.begin();it!=v.end();it++)
{cout<<it;//解引用,返回迭代器所指的元素 }
It->mem 解引用,獲取該元素成員mem
It==it1 相等則說明指示爲同一個元素或是同一個容器的尾後迭代器,不等則反之。
++it指向 it的下一個元素
–it 指向it的上一個元素
It-it1同一容器兩迭代器之間的距離允許迭代器加減n仍然代表迭代器加法與減法的賦值運算同樣允許。同一容器中兩個迭代器,一個迭代器指向的位置前於另一個迭代器,則前者小於後者。而迭代器也分爲許多種,上面的迭代器可以讀寫並訪問容器中所有的元素。
string::iterator it 之可以讀寫容器中的string元素。
vector::const_iterator it可以讀容器中的元素,但不可以寫
string::const_iterator it 可以讀容器中的所有字符但不能寫文件讀寫
將文件中的數據輸入到程序中,需要先設計一個程序,名爲文件
可以以這樣的方式輸入數據c:>文件<向外輸出數據的文件>向其中輸入數據文件名
標準輸入輸出流
頭文件
Ifstream 輸入文件的輸入流
ofstream 輸出文件的輸出流
例如 #include
using namespace std;
int main()
{ ifstream in(“要輸入數據文件的地址.文件的類型”);\同時定義對象和打開文件
int num;
in>>number;\在文件中向外輸入數據到number
in.close(); 輸入數據完成之後需要關閉輸入流
ofstream out;定義輸出的對象
out.open(“要輸出數據文件的地址.文件的類型”);打開指定的文件,若文件不存在則會創建此文件
out<<number;將剛剛輸入的number輸出到指定文件中
out.close();輸出完成後需要將輸出流關閉
}
字符串流: 頭文件
Istringstream 從string對象中輸入數據
Ostringstream 向string對象中輸出數據
例如 getline(cin,buffer) istringstream is(buffer);從buffer中輸入數據
is>>number;ostringstream f(“ “);定義輸出的對象f
f<<number; 將number輸出到f中
函數
定義函數:
函數返回值類型
函數名(行參類型 形參名)
{ 函數內的內容 }
void類型的函數無返回值。
函數若是寫在主函數之後必須在主函數之前對函數進行聲明。例如: Int po(int i);
遞歸函數:遞歸函數是直接或間接調用自己的函數,例如在計算階乘時可以使用遞歸函數例如
int p(int n){
If (n>1)
{ return n
p(n-1);}
}
參數傳遞傳值和傳引用傳值時,實參和形參是兩個獨立的對象,即行參在函數中的變化並不影響實參的變化,在傳引用時實參和形參被綁定在一起,即行參的變化也會引起實參的變化。
傳值的引用例如 int po(int p) {}這樣定義的函數是傳值,即實參和形參爲兩個獨立的對象。
int po(int &p)這樣定義的函數是傳址引用,即實參和形參是綁定在一起。
int po(int * p)傳指針的函數,行參與實參也是綁定在一起
數組參數
定義時不表明數組長度
Int po(int p[]){}
二維數組
Int po(int p[][10])需要標明行的長度
{}
返回引用
將函數的返回值進行操作
例如:const string &po(const string &U)
{ Return U;}
cout<<po(n); 因爲是傳址,u與n綁定在一起,此時輸出的就是n本身,可以對函數進行操作,既是對n操作。
函數重載:即函數有着一樣的函數名,但其中形參不同類型;例如
int k(int a);
Void k(int m);
Int k(const int m);
函數有着相同的名字,但在引用時函數會根據實參而選擇適合的形參的函數進行處理,或則選擇最合適的函數進行操作。靜態局部變量與局部變量的區別就是靜態對象會一直存在,但是局部變量會在使用範圍之後消失,定義靜態對象可用static定義,例如static int a;
Register 可以定義寄存器變量,寄存器變量的優點可以加速程序運行速度,定義register int a;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章