C++ iterator 迭代器



//迭代器iterator 是访问string和vertor等更通用的一种方式,比下标访问更好
//有效的迭代器或者指向元素或者指向容器中的下一个位置
//有迭代器的类型(容器),同时拥有返回迭代器的成员begin/end
//begin返回迭代起的第一个元素,end返回迭代器成员的下一个元素的位置(是一个本身不存的元素)
//特殊情况如果迭代器为空,则begin和end返回的是同一个迭代器
//迭代器运算符 *iter,iter->mem(解引用指针并获取该元素名为men的成员) , ++iter, --iter,iter1!=iter2,iter1==iter2
//不能对end执行增操作和解引用操作,因为end伐木机哦的迭代器并不实际指向某个元素
//***泛型编程:这种编程风格在标准库提供的所有容器上都有效 例如:迭代器和!=
//迭代器类型iterator(能读写迭代器的元素)/const_iterator(只能读而不能写)
//迭代器的运算:iter+n, iter-n, iter1+=n, iter1-=n, iter1-iter2(两个迭代器的距离,类型为difference_type
//指的是iter2向前移动差值个元素后得到左侧的迭代器), >,>=,<,<=
//迭代器失效的情况:1)范围for循环中向vector对象添加元素。2)任何一种可能改变vector对象容器的操作,如push_back

//vector<string> v7{10,"hi"};指出其中元素的个数并将其输出

#include<iostream>
#include<string>
#include<vector>
using namespace std;

void vec_Num(){
    vector<string> v7 = { 10, "hi" };
    cout << "The number of vector is " << v7.size() << endl;
    for (int i = 0; i < v7.size(); i++)
    {
        cout << "The element of v7 is:";
        cout <<* v7.begin() << endl;
    }
     //更简单的方法
     //因为这里只是需要对迭代器进行读取,所以可以使用cbegin/cend(指的是静态迭代器,而begin和end指的是动态迭代器)
    for (auto it = v7.begin(); it != v7.end(); it++)
        cout << "The element of v7 is: " << *it << endl;
}

void upper_String(){
     vector<string> v7;
     string s;
     string ss;
     cout << "please input a sentence:" << endl;
     cin >> s;
     //*iter解引用后是pair<string,string>的指针类型,所以不能执行字符串的一些函数
     for (auto it = s.begin(); it != s.end(); it++)
     {
          cout << *it;
     } 
     string s1;
     //这里使用getline有一个bug,当按下换行后会将第一个空格之前的字符串输出
     //->这个可以读取指向对象中的成员
     getline(cin, ss);
     v7.push_back(ss);
     for (auto itt = v7.begin(); itt != v7.end() && !itt->empty(); itt++)
     {
          for (auto it2 = itt->begin(); it2 != itt->end(); it2++)
         *it2 = toupper(*it2);
          cout << *itt << endl;
     }
}

int main(){
     vec_Num();
     upper_String();
     return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值