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。乱了顺序是不行的

请看下面一段代码:

C++学习之容器的摸索
  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 }
C++学习之容器的摸索

上面的代码如果将vector换成deque是没问题的,但是如果换成list程序就会出错,这就验证了1.

如果将reverse_iterator换成iterator,则程序也会出错,那时因为没注意到2.

C++学习之容器的摸索,布布扣,bubuko.com

C++学习之容器的摸索

上一篇:Java 从后向前依次比较两个数组


下一篇:javascript 执行顺序详解