初学容器,容易犯错的地方
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.