字符串类迭代器

本文介绍了C++中自定义字符串类(String)及其迭代器(Iterator)的实现。通过迭代器,可以对字符串进行遍历操作。迭代器设计包括开始、结束、迭代递增和元素访问等关键函数。示例代码展示了一个简单的使用迭代器遍历字符串的例子。

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

#include
#include//C++ string
/*
迭代器:
1.作用:为容器提供统一的遍历方式,再提供遍历的前提下,使得使用人员无法清楚内部的存储结构,加强封装性。
2.面向对象的指针:作为对象却做一个指针在做的事情。

由于字符串类型,物理地址连续,采用下标访问的方式,更快,更方便,更好。所以做了优化。

总结:
迭代器的设计应该由容器开发人员来进行开发,根据不同容器的特点设计不同设计方案的迭代器,必须要有4个函数,
1.开始迭代的函数
2.结束迭代的函数
3.进行迭代的函数,也就是++;
4.访问的函数,也就是*,解引用。
*/
class String;
class Iterator
{
public:
Iterator(String * ptr,int idx)
:pstr(ptr),index(idx)
{ }
bool operator != (const Iterator& rhs)
{
return index != rhs.index;
}
Iterator& operator ++ ()
{
index++;
return *this;
}
Iterator operator ++ (int)
{
Iterator tmp(*this);
index++;
return tmp;
}
char & operator * ();
private:
String * pstr;
int index;
};

class String
{
public:
typedef Iterator iterator;
String(const char * ptr)
{
mptr = new char

### 如何在C++中使用 `std::string` 的迭代器进行遍历 在 C++ 中,`std::string` 提供了一种方便的方式来通过其迭代器访问和修改字符串的内容。以下是具体实现方式: #### 使用 `std::string::iterator` 可以通过定义一个 `std::string::iterator` 来指向字符串的第一个字符,并逐步移动到字符串的末尾。下面是一个完整的例子来展示如何完成这一过程[^1]。 ```cpp #include <iostream> #include <string> int main() { std::string str = "Hello, world!"; // 获取起始迭代器 std::string::iterator it = str.begin(); // 遍历直到结束迭代器 while (it != str.end()) { std::cout << *it << " "; ++it; } std::cout << std::endl; return 0; } ``` 在这个程序中,我们创建了一个名为 `str` 的字符串对象并初始化为 `"Hello, world!"`。接着声明了一个 `std::string::iterator` 类型变量 `it` 并将其设置为字符串的开头 (`str.begin()`)。随后,在 `while` 循环中逐一打印每个字符直至到达字符串结尾(`str.end()`)为止[^4]。 #### 另一种方法——范围基循环(Range-based For Loop) 虽然上述方法展示了传统风格的迭代器应用,但在现代 C++(自 C++11 起),推荐采用更简洁的方式即 **范围基循环** 进行容器或序列的操作[^2]: ```cpp #include <iostream> #include <string> int main() { std::string str = "Hello, world!"; for(char c : str){ std::cout << c << ' '; } std::cout << '\n'; return 0; } ``` 此版本无需显式处理迭代器细节即可轻松完成相同功能。 #### 常量迭代器(const_iterator) 如果仅需读取而不需要更改原始数据,则应考虑改用 const_iterator ,这有助于防止意外改变原数组内容[^3]: ```cpp #include <iostream> #include <string> using namespace std; int main(){ string s = "Sample Text"; for(string::const_iterator cit=s.cbegin();cit!=s.cend();++cit){ cout<<*cit<<" "; } cout<<"\n"; return 0; } ``` 这里利用了成员函数 `.cbegin()` 和 `.cend()` 返回常量迭代器实例,从而保护源串免受任何潜在改动影响. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值