C++學習之容器的摸索
初學容器,容易犯錯的地方
1.vector,list和deque都是順序容器。其中vector和deque都可以通過下標訪問,而list不能
2. 容器的begin和end操作
c.begin()返回一個迭代器,它指向容器c的第一個元素
c.end()返回一個迭代器,它指向容器c的最後一個元素的
c.rbegin()返回一個逆序迭代器,它指向容器c的最後一個元素
c.rend()返回一個逆序迭代器,它指向容器c的第一個元素的前面一個元素
注意以上操作的返回的迭代器型別,前兩個是iterator,後面一個是reverse_iterator。亂了順序是不行的
請看下面一段程式碼:
1 #include <iostream> 2 #include <vector> 3 #include <list> 4 #include <deque> 5 #include <string> 6 using namespace std; 7 8 int main() 9 { 10 int i = 0; 11 char *words[] = {"stately","plump","buck","mulligan"}; 12 size_t words_size = sizeof(words) / sizeof(char *); 13 cout << "陣列大小:" << words_size << endl; 14 vector<string> words2(words,words+words_size); 15 cout << "我採用迭代器的方式逆序訪問容器:" << endl; 16 for(vector<string>::reverse_iterator it=words2.rbegin();it!=words2.rend( );++it)17 { 18 cout << "list容器內內容為:"<< *it << endl; 19 } 20 cout << "現在採用容器大小的方式訪問容器:" << endl; 21 for(i = 0;i < words2.size();++i) 22 { 23 cout << "list容器內內容為:" << words2[i] << endl; 24 } 25 return 0; 26 }
上面的程式碼如果將vector換成deque是沒問題的,但是如果換成list程式就會出錯,這就驗證了1.
如果將reverse_iterator換成iterator,則程式也會出錯,那時因為沒注意到2.
3.vector和deque型別迭代器支援的操作
iter + n 在迭代器上加(減)整數值n,將產生指向容器前面(後面)第n個元素的迭代器
iter - n
iter1 += iter2 這是迭代器加減法的符合預算:將iter1加上或減去iter2的預案算結果賦給iter
iter1 -= iter2
iter1 - iter2 連個迭代器的減法,其運算結果加上右邊的迭代器既得左邊的迭代器,這兩個迭代器必須指向同一個容器中的元素或超出容器末端的下一位置。只適用於vector和deque容器
>,<,>=,<= 迭代器的關係操作符。當一個迭代器指向的元素在容器中位於另一個迭代器指向的元素之前,則前一個迭代器小於後一個迭代器。關係操作符的兩個迭代器必須指向同意容器的元素或超出容器末端的下一個位置。只適用於vector和deque容器