c++11的 std::array 的一個(gè)小例子
/**
?* clang++ index1.cpp -std=c++11
?*
?* c代碼里有 int a[4] 這樣的內(nèi)置數(shù)組,在c++中增加了
?* std::array 類,是對(duì)這樣內(nèi)置數(shù)組類型的增強(qiáng)版。
?* 但是又和 std::vector不同. std::array 在聲明的
?* 時(shí)候需要給定類型和大小,聲明后不支持大小的改變。
?*/
# include <iostream>
# include <array>
int main(int argc, char const *argv[])
{
?? ?/**
?? ? * 可以直接用{}表達(dá)式來直接初始化
?? ? */
? std::array<int, 3> a0 = {1, 2, 3};?? ?
?? ?/**
?? ? * 可以用具有已有的std::array 來初始化
?? ? */
? std::array<int, 3> a1 = a0;??????????????????? ?
?? ?/**
?? ? * array不可以用變量指定
?? ? * 下面兩行代碼編譯的時(shí)會(huì)報(bào)錯(cuò)
? int m = 5;
? int b[m];???????????????????????????????? //正確,內(nèi)置數(shù)組
?? ? */
?? ?/**
?? ? * 下面兩行編譯也會(huì)錯(cuò)誤的
?? ? const int m =5
?? ? int? b[m];
?? ? */
?? ?/**
?? ? * 但是下面兩行代碼能夠編譯成功
?? ? */
?? ?constexpr int m = 3;
?? ?int b[m];
?? ?/**
?? ? * 代碼的代碼也無法編譯通過,因?yàn)閎是一個(gè)內(nèi)置數(shù)組
? std::array<int, 3> a4 = b;??????????????? //錯(cuò)誤,array不可以用數(shù)組指定
?? ? */
?? ?/**
?? ? * 這個(gè)是可以的編譯成功的
?? ? */
? std::array<int, 3> a2; ?
?? ?a2 = a0;
?? ?/**
?? ? * m 是 int 或者const int 下面的一行都無法編譯通過,
?? ? * 但是 m 是一個(gè)constexpr int , 下面是可以成功編譯的
?? ? */
? std::array<int, m> a3;????????????????? ?
?? ?/**
?? ? * a2 是一個(gè)std::array, 下面的給a4賦值也是可以編譯的
?? ? */
? std::array<int,3> a4 = a2; ?? ?
?? ?/**
?? ? * a2 是一個(gè)std::array, 下面以a2為參數(shù)的構(gòu)造函數(shù)也是可以的。
?? ? */
? std::array<int,3> a5(a2); ?? ?
?? ?std::cout<<"順序輸出"<<std::endl;
?? ?for(auto it = a5.begin(); it != a5.end(); it++){
?? ??? ?std::cout<< *it << std::endl;
?? ?}
?? ?std::cout<<"逆序輸出"<<std::endl;
?? ?for(auto it = a5.rbegin(); it != a5.rend(); it++){
?? ??? ?std::cout<< *it << std::endl;
?? ?}
? return 0;
}