C++學習筆記(3) 數組

數組的特性
1、大小固定,不能隨意增加元素,也是存放類型相同的對象的容器。
2、數組的維度在聲明時必須爲確知常量。或者是int b[]={1,2,3}沒有顯示指明維度,默認維度爲3.
以下方式不對:
int a=10;
string s[a]; #a是變量,不是常量除非a聲明爲const int a=10;
string s1[getSize()]; #函數getSize的返回值不是常量,除非當它是constexpr時;
3、數組不允許拷貝賦值。
4、數組元素初始化:
const int sz=10;
int s[sz]={1,2,3};
string s2[sz]={“bye”,”no”}
5、字符數組的特性:
char a[]={‘c’,’+’,’+’}; #列表初始化,沒有空字符
char b[]=”c++”; #字符數組大小爲4,自動添加字符串末尾的空字符
char c[]={‘c’,’+’,’+’,’\0’}; #列表初始化,含有顯示的空字符
const char d[6]=”Daniel”; #錯誤,沒有空間存放字符串尾部的空字符
6、理解複雜的數組聲明
int *ptrs[10]; #指針數組
int &refs[10]=……. #錯誤,不存在引用的數組
int (*Parray)[10]=&arr; #指針,指向一個含有10個元素的數組
int (&arrRef)[10]=arr; #引用一個含有10個整數的數組
int *(&arry)[10]=ptrs; #引用一個含有10個整形指針的數組
note:要想理解數組聲明的含義,最好的辦法是從數組的名字開始按照由內向外的順序閱讀
7、遍歷數組元素
for(auto i:scores) #將i改爲&i即可實現對scores元素的修改
cout<<i;
8、數組下標的類型是size_t。它是一種及其相關的無符號類型,在cstddef.h頭文件中定義。


思考:相比於vector,數組有哪些缺點


p3.31
const int size=10;
int a[size];
for (int i=0;i<size;i++)
a[i]=i;

int b[size]={};#全部初始化爲0
int k=0;
for (auto &i:b)
i=a[k++];

vector<int> iv;
for(int i=0;i<size;i++)
iv.push_back(a[i]);

指針與數組
1、對數組取地址即獲得指向該元素的指針;在大多數表達式中,使用數組類型的對象其實是使用一個指向該數組首元素的指針。
int num[]={1,2,3,4};
int *p=num;等價於int *p=num[0];
auto ia(num); 等價於 int *ia=num;
auto ia2(&num[0]);ia和ia2的類型是指針
2、指針也是迭代器,指向數組元素的指針支持vector和string的迭代器所支持的運算。
*p;
p->men;
++p;
–p;
p1==p2;
p1!=p2;
p1+n; 指針加上一個整數所得結果還是一個指針,注意相加後不能超過數組的size
p1-p2; 注意是指向數組的指針

、<、>=、<=
3、C++11標準庫函數begin和end
int ia[]={2,3,4,5};
int *beg=begin(ia);
int *end=end(ia); #指向尾元素下一位置的指針,與尾迭代器一樣,不能自加和解引用
4、指針下標不是無符號類型,這與string和vector的迭代器不一樣
int *p=ia[2];
int j=p[1]; #p[1]指向*(p+1)位置,即ia[3]
int k=p[-2];#指向ia[0]

p3.35

int num[]={2,3,6,5,4};
auto a(num);
int *endi=end(num);
for(;a!=end;a++)
*a=0;
for(int i=0;i<end(num)-begin(num))
cout<<num[i];

p3.36

int a[]={2,3,4,5};
int b[]={5,4,6,7};
if(end(a)-begin(a)==end(b)-begin(b)){
    for(int i=0;i<end(a)-begin(a);i++){
    if(a[i]!=b[i]){
          cout<<"數組不相等"<<endl;      
          break;
    }else if(i==(end(b)-begin(b))-1)
        cout<<"數組相等"<<endl;

    }
}   
else{
    cout<<"數組不相等"<<endl;
}

vector a{2,3,4,5,7};
vector b{1,2,3,4,5};
auto iter2=b.begin();
if(a.size()!=b.size()){
cout<<”數組不相等”;

}else{
for(auto iter=a.begin();iter!=a.end();iter++){
if (*iter!=*iter2)
cout<<”數組不等”<

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