STL string迭代器

本文详细介绍了C++中迭代器的使用,包括如何遍历string容器,修改元素值,以及处理迭代器失效问题。通过实例演示了迭代器在链接算法中的作用,涉及到了string的append操作和元素修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
using namespace std;
void FunIterator()//迭代器会与算法链接。适用于所有容器。
{
    string str("abcdefg");
    string::iterator ite;//string::iterator类型的迭代器ite。相当于一个指向string对象元素的一个指针,本质相当于一个char*(根据容器里面的元素或数据类型确定)的指针。
    //char* a = str.c_str();//指向字符串的首地址。
    ite = str.begin();// 返回一个迭代器,指向第一个字符。
    /*for (size_t  i = 0; i < str.size(); i++)
    {
        cout << *ite << " ";
        ite++;
     }*/

    //for (size_t i = 0; i < str.size(); i++)
    //{
    //    cout << ite[i] << " ";
    //    //ite++;
    //}
    
    //for (ite; ite!= str.end(); ite++)//函数end()返回一个迭代器,指向字符串的末尾(最后一个字符的下一个位置)
    //{
    //    //*ite = 'a';//修改元素值。
    //
    //    cout << *ite << " ";
    //    
    //}
    str.append(18, 'a');//string重新申请空间的时候,迭代器会失效。如果是链表结构则不会,因为链表尾加一块空间时,空间首地址不变。而普通的数组末尾加一块空间则总空间的首地址会改变,就需要重新申请空间首地址。
    //ite = str.begin();重新返回一个迭代器,指向新的字符串第一个字符。
    ite[2] = 'h';//修改元素值。
    cout << str<< endl;

}
int main()
{
    FunIterator();
    system("pause");
    return 0;
}

### C++ STL `map` 迭代器使用方法 #### 创建和初始化映射表 为了展示如何使用 `std::map` 的迭代器,先创建并填充一个简单的整数到字符串的映射关系。 ```cpp #include <iostream> #include <map> using namespace std; int main() { // 初始化 map map<int, string> myMap; // 插入键值对 myMap.insert(pair<int, string>(1, "one")); myMap.emplace(2, "two"); } ``` 此段代码展示了两种不同的方式来向 `map` 中添加元素:一种是通过 `insert()` 函数传入一对键值;另一种则是利用 `emplace()` 方法直接构造对象[^4]。 #### 遍历整个映射表 下面的例子说明了怎样遍历所有的键值对: ```cpp // 使用 begin() 和 end() 获取迭代范围,并打印所有项 for (auto it = myMap.begin(); it != myMap.end(); ++it) { cout << (*it).first << ": " << (*it).second << endl; } ``` 这里采用的是自动类型推导 (`auto`) 来声明迭代器变量 `it`,并通过解引用操作符 `*` 访问当前节点的数据成员 `.first`(即 key)和`.second`(即 value)。这种方式适用于任何类型的关联容器,包括但不限于 `map`[^3]。 #### 查找特定条目 如果想要查找某个具体的键是否存在及其对应的值,则可借助于 `find()` 成员函数: ```cpp // 尝试找到指定key的位置 if(myMap.find(2)!=myMap.end()){ auto found=myMap.find(2); cout<<"Key 2 exists with Value:"<<found->second<<endl; }else{ cout<<"Key not present!"<<endl; } ``` 这段程序尝试定位给定的关键字位置。当找到了匹配项时返回相应的迭代器指针;如果没有发现该关键字则会到达 `end()` 所指示的地方[^2]。 #### 删除单个或多个元素 可以通过调用 erase() 移除由迭代器所指向的具体项目: ```cpp // 删除第一个元素 if (!myMap.empty()) { myMap.erase(myMap.begin()); } // 清空全部内容 myMap.clear(); ``` 上述例子中还介绍了清空整个集合的操作——只需简单地调用 clear() 即可完成这一目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clown_30

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值