c/c++语言开发共享c/c++ 标准库 迭代器(iterator)

c/c++ 标准库 迭代器 begin和end运算符返回的具体类型由对象是否是常量决定,如果对象是常量,begin和end返回const_iterator;如果对象不是常量,返回iteraotor 1,但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。 2,不能在范围for循环中向vec …


c/c++ 标准库 迭代器

begin和end运算符返回的具体类型由对象是否是常量决定,如果对象是常量,begin和end返回const_iterator;如果对象不是常量,返回iteraotor

1,但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。

2,不能在范围for循环中向vector对象添加元素

标准库 迭代器(iterator)的小例子

test1~test8

#include <iostream> #include <string> #include <vector>  using namespace std;  int main(){    //test1                                                                          /*                                                                               string s("abc bdc");                                                             auto it = s.begin();                                                             while(it != s.end()){                                                              *it = toupper(*it);                                                              ++it;                                                                          }                                                                                cout << s << endl;                                                               */    //test2                                                                          /*                                                                               string s("abd ddd");                                                             for(auto it = s.begin(); it != s.end() && !isspace(*it); ++it){                    *it = toupper(*it);                                                            }                                                                                cout << s << endl;                                                               */    //test3 不可改变vector::const_iterator类型                                       /*                                                                               vector<int>:: iterator it;                                                       vector<int>:: const_iterator it2;                                                vector<int> v(5,1);                                                              it = v.begin();                                                                  it2 = v.begin();                                                                 vector<int> const cv(5,2);                                                       //it = cv.begin();//it是可改变的vector::iterator,所以编译错误                   for(auto s : v){                                                                   cout << s;                                                                     }                                                                                cout << endl;                                                                    */    //test4 不可改变string::const_iterator类型                                       /*                                                                               string::iterator sit;                                                            string::const_iterator sit2;                                                     string s1("abc");                                                                sit2 = s1.begin();                                                               while(sit2 != s1.end()){                                                           //*sit2 = toupper(*sit2);                                                        cout << *sit2;                                                                   ++sit2;                                                                        }                                                                                cout << endl;                                                                    */    //test5 cbegin和cend,返回const类型的iterator                                     /*                                                                               string s1("aaaa");                                                               auto it1 = s1.cbegin();                                                          //*it1 = 'c';//不可以通过const类型的iterator改变原来的对象                       cout << s1 << endl;                                                                                                                                               vector<int> v(4,2);                                                              auto vit1 = v.cbegin();                                                          //*vit1 = 5;//不可以通过const类型的iterator改变原来的对象                        */    //test6 string迭代器运算                                                         /*                                                                               string s("abcd");                                                                string s1("abc");                                                                vector<int> v(5,3);                                                              auto it1 = s.begin();                                                            auto it2 = s.begin();                                                            if(it1 == it2){                                                                    cout << "=" << endl;                                                           }                                                                                ++it1;                                                                           it1 += 1;                                                                        if(it1 > it2){                                                                     cout << ">" << endl;                                                             cout << it1 - it2 << endl;                                                     }                                                                                string::difference_type juli = it1 - it2;                                        cout << juli << endl;                                                            */    //test7 vector迭代器运算                                                         /*                                                                               vector<string> s(4,"abcd");                                                      vector<string> s1(5,"abc");                                                      auto it1 = s.begin();                                                            auto it2 = s.begin();                                                            if(it1 == it2){                                                                    cout << "=" << endl;                                                           }                                                                                                                                                                 ++it1;                                                                           it1 += 1;                                                                        if(it1 > it2){                                                                     cout << ">" << endl;                                                             cout << it1 - it2 << endl;                                                     }                                                                                vector<string>::difference_type juli = it1 - it2;                                cout << juli << endl;                                                            */    //test8 利用迭代器实现二分法                                                     vector<string> v{"a","b","c","d","e"};   string target("b");   vector<string>::size_type idx = 0;   auto beg = v.begin();   auto mid = v.begin() + v.size() / 2;   auto end = v.end();   while(mid != end && *mid != target){     if(target < *mid)       end = mid;     else       beg = mid + 1;     mid = beg + (end - beg) / 2;   }   if(mid == end){     cout << "not found" << endl;   }   else{     idx = mid - v.begin();     cout << idx << ":" << *mid << endl;   } }
www.ctvol.com true https://www.ctvol.com/c-cdevelopment/608130.html Article c/c++语言开发共享c/c++ 标准库 迭代器(iterator)

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/608130.html

(0)
上一篇 2021年5月15日
下一篇 2021年5月15日

精彩推荐