C++的迭代器(iterator)是个非常好的技术,能灵活运用内带来很优雅的程序代码。
1 遍历数组
最简单的也是最常用的就是遍历访问一个数组了,如检查一个字符串里面是否含有某个字符:
bool has_c(const string& s, char c) // does s contain the character c?
{
auto p = find(s.begin(),s.end(),c);
if (p!=s.end())
return true;
else
return false;
}
C++的数组访问习惯就是,到了end()就代表遍历结束。其中end位置是代表最后一个元素的下个位置。
当然程序可以进一步简化:
bool has_c(const string& s, char c) // does s contain the character c?
{
return find(s.begin(),s.end(),c)!=s.end();
}
2 下面是一个使用模板查找某数组某个元素,然后替换的测试程序:
#include<iostream>
#include<vector>
#include<string>
#include<list>
using namespace std;
template<typename C, typename V>
vector<typename C::iterator>find_all(C& c,V v)
{//Caution!:: You just have to add every typename befor C,
//if the C need to use ::
//The typename is needed to inform the compiler that C’s iterator is supposed to be a type and not a value of some type, say, the integer 7.
vector<typename C::iterator>res;
for(auto p=c.begin();p!=c.end();++p)
if(*p==v)
res.push_back(p);
return res;
}
void test()
{
string m=("Mary hod o little lomb");
cout<<m<<endl;
for(auto p:find_all(m,'o'))
*p = 'a';
cout<<m<<endl;
double dou[] = {1.1,2.2,3.3,4.5,2.3,2.2};
list<double> ld(dou,dou+6);
for(auto x:ld)
cout<<x<<" ";
cout<<endl;
for(auto p:find_all(ld,2.2))
*p = 100.0;
for(auto x:ld)
cout<<x<<" ";
cout<<endl;
}
int main()
{
test();
return 0;
}
3 C++迭代器的用法都很通用,有指针和下标的通用特征,高级的用法是用在数据流中去.
如下把string写到cout中去,其实就是把字符输出到屏幕上:
ostream_iterator<string> oo {cout};
int main()
{
∗oo = "Hello, "; //就是cout<<"Hello, "
++oo;
∗oo = "world!\n"; //就是cout<<"wor ld!\n"
}
对上面的oo赋值就相当于赋值给cout,也就是可以在屏幕上显示出来。
同样道理可以操作输入流:
istream_iterator<string> ii {cin};
有点不同的就是我们可以指定其输入的结束符,列如下面就是其默认的结束符,一般txt文本中都有自动带上这样的结束符的。
istream_iterator<string> eos {};
总结:
对比一般用下标的编程法,就会觉得用迭代器会大大减少下标出错的几率。
Reference:
The C++ Programming Language 4ed
分享到:
相关推荐
NULL 博文链接:https://mingongwang.iteye.com/blog/2222094
TCPL C++程序设计语言, C++程序设计的圣经,不善于用狗狗搜索的请在这里下载
1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与大家共享!! 1. TCPL和D&E 01 The C++ Programming Language 02 The Design and ...
拥有编译时代码评估和迭代嵌入样板代码。本地化代码的高效编译。向语言参考作贡献本书初步开始翻译,欢迎提要或PR: : 本书每个文件皆包含文件地址和文件最后一次修改的commit hash。如发现重复,欢迎提要Issue或PR...
1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与大家共享!! 1. TCPL和D&E 01 The C++ Programming Language 02 The Design and ...
1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与大家共享!! 1. TCPL和D&E 01 The C++ Programming Language 02 The Design and ...
1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与大家共享!! 1. TCPL和D&E 01 The C++ Programming Language 02 The Design and ...
1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与大家共享!! 1. TCPL和D&E 01 The C++ Programming Language 02 The Design and ...
1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与大家共享!! 1. TCPL和D&E 01 The C++ Programming Language 02 The Design and ...
TCPL the C++ programming language Third Edition(完整书签) C++ 之父原著 文字版
C++之父,TCPL第四版,不过是英文版。
迄今为止,TCPL是除了C++标准文献之外最权威的C++参考手册。和大多数人的看法不大一样,我认为Bjarne的文字语言并不逊色于他所创建的程序语言,至少我喜欢这种学院气息浓厚的作品。本书对C++语言的描述轮廓鲜明、...
entrys-pro:可在任何地方工作的安全TCPL4隧道
The C++ Programming Language 3rd Edition(中文版)完整最终版
The C++ programming language 部分习题答案
tcpl:我对Brian Kernighan和Dennis Ritchie的“ The C Programming Language”的尝试
全面、系统地讲述了C语言的各个特性及程序设计的基本方法,包括基本概念、类型和表达式、控制流、函数与程序结构、指针与数组、结构、输入与输出、UNIX系统接口、标准库等内容。 本书的讲述深入浅出,配合典型例证...
够权威 <br>Brian W.Kernighan && Dennis M.Ritchie
/// 服务器程序使用的端口,默认为8888 /// private int _port = 8888; /// /// 接收数据缓冲区大小64K /// private const int _maxPacket = 64 * 1024; /// /// 服务器端的监听器 /// private ...
Coursera上JAVA中基本数据结构和算法介绍,由 ,包括堆栈,队列,排序算法,二叉搜索树等。 (TCPL) K&R 的书The C Programming Language 的练习。 包括一些有用的提示或代码片段。 举办的coursera上介绍基本的机器...