天天看點

Chapter3:字元串、向量和數組

  • C++11新特性:範圍for(range for)
1 for (declaration: expression)
2     statement      

vector和數組都是對象的集合,而引用不是對象。

vector對象可以高效地增長,在定義vector對象的時候設定其大小也就沒什麼必要了,事實上如果這麼做性能可能更差。

  • C++11新特性:cbegin() & cend()

為了便于專門得到const_iterator類型的傳回值,C++11新标準引入了兩個新函數,分别是cbegin() 和cend().

  • 如何了解複雜的數組聲明?
1 int *ptrs[10]; //ptrs是含有10個整型指針的數組
2 int &refs[10] = /*?*/; //錯誤,不存在引用的數組
3 int (*Parray) [10] = &arr; //Parray指向一個含有10個整數的數組
4 int (&arrRef) [10] = arr; //arrRef引用一個含有10個整數的數組      

對于Parray來說,從右向左了解就不太合理了。因為數組的次元是緊跟着被聲明的名字的,是以就數組而言,由内向外閱讀要比從右向左好多了。

首先是圓括号裡面的,*Parray意味着Parray是個指針;

接下來觀察右邊,Parray是個指向大小為10的數組的指針;

最後觀察左邊,知道數組中的元素是int。

1 int ia[5];
2 auto ia2(ia); //ia2是一個整型指針
3 decltype(ia) ia3; //ia3是一個含有10個整數的數組      
  • C++11新特性:标準庫函數begin() 和end()

為了讓指針的計算更安全、簡單,C++11新标準引入了兩個名為begin和end的函數,用于計算數組的疊代器。

  • 多元數組的通路方式
1     int ia[3][4];
 2     for (auto p = ia; p != ia + 3; ++p)
 3     {
 4         for (auto q = *p; q != *p + 4; ++q) 
 5         {
 6             //do something
 7         }
 8     }
 9 
10     for (auto p = begin(ia); p != end(ia); ++p)
11     {
12         for (auto q = begin(*p); q != end(*p); ++q)
13         {
14             //do something
15         }
16     }      

轉載于:https://www.cnblogs.com/wangyanphp/p/5770873.html