c++ STL 迭代器机制
2013-07-05 19:29
330 查看
先说明一些简单的知识:
(1) 每种容器类型都定义了自己的迭代器类型,如vector:
vector<int>::iterator iter;这条语句定义了一个名为iter的变量,它的数据类型是vector<int>::iterator。为什么会有这样奇怪的定义呢?那是因为iterator是vector的一个public内部class,另外::是“域操作符”
(2) 使用迭代器读取vector中的每一个元素:
vector<int> ivec(10,1);
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
{
*iter=2; //使用 * 访问迭代器所指向的元素
}
const_iterator:
只能读取容器中的元素,而不能修改。
for(vector<int>::const_iterator citer=ivec.begin();citer!=ivec.end();citer++)
{
cout<<*citer;
//*citer=3; error
}
vector<int>::const_iterator 和 const vector<int>::iterator的区别
const vector<int>::iterator newiter=ivec.begin();
//*newiter=11; /不/可以修改指向容器的元素
newiter++; //迭代器本身能被修改
(3) iterator的算术操作:
iterator除了进行++,--操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.
const vector<int>::iterator newiter=ivec.begin();
vector<int>::iterator newiter2=ivec.end();
cout<<"\n"<<newiter2-newiter;
内部机制:
list的内部代码类似如下:
template <class Node>
class List{
Node* head;
class iterator{
Node* ptr;
public:
iterator(Node* p=0):ptr(p){}
Node operator*()const{return *ptr;}
iterator& operator++(){ptr=ptr->next; return *this;}
iterator operator++(int)
{iterator tmp=*this ; ++*this; return tmp;}
bool operator==(const iterator&i)const{return ptr==i.ptr;}
bool operator!=(const iterator&i)const{return ptr!=i.ptr;}
};
iterator begin(){return iterator(head);}
iterator end(){return iterator();}
……
};
1、摘自C++ STL 迭代器机制剖析
2、摘自C++ typedef用法小结 (※不能不看※):http://www.cnblogs.com/charley_yang/archive/2010/12/15/1907384.html
(1) 每种容器类型都定义了自己的迭代器类型,如vector:
vector<int>::iterator iter;这条语句定义了一个名为iter的变量,它的数据类型是vector<int>::iterator。为什么会有这样奇怪的定义呢?那是因为iterator是vector的一个public内部class,另外::是“域操作符”
(2) 使用迭代器读取vector中的每一个元素:
vector<int> ivec(10,1);
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
{
*iter=2; //使用 * 访问迭代器所指向的元素
}
const_iterator:
只能读取容器中的元素,而不能修改。
for(vector<int>::const_iterator citer=ivec.begin();citer!=ivec.end();citer++)
{
cout<<*citer;
//*citer=3; error
}
vector<int>::const_iterator 和 const vector<int>::iterator的区别
const vector<int>::iterator newiter=ivec.begin();
//*newiter=11; /不/可以修改指向容器的元素
newiter++; //迭代器本身能被修改
(3) iterator的算术操作:
iterator除了进行++,--操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.
const vector<int>::iterator newiter=ivec.begin();
vector<int>::iterator newiter2=ivec.end();
cout<<"\n"<<newiter2-newiter;
内部机制:
list的内部代码类似如下:
template <class Node>
class List{
Node* head;
class iterator{
Node* ptr;
public:
iterator(Node* p=0):ptr(p){}
Node operator*()const{return *ptr;}
iterator& operator++(){ptr=ptr->next; return *this;}
iterator operator++(int)
{iterator tmp=*this ; ++*this; return tmp;}
bool operator==(const iterator&i)const{return ptr==i.ptr;}
bool operator!=(const iterator&i)const{return ptr!=i.ptr;}
};
iterator begin(){return iterator(head);}
iterator end(){return iterator();}
……
};
1、摘自C++ STL 迭代器机制剖析
2、摘自C++ typedef用法小结 (※不能不看※):http://www.cnblogs.com/charley_yang/archive/2010/12/15/1907384.html
相关文章推荐
- C++走向远洋——60(十四周阅读程序、STL中的简单容器和迭代器)
- 【C++】 C++标准模板库(十二) 迭代器和STL
- 【C++ STL系列】迭代器 iterator
- C++抽象编程——STL实战(1)——迭代器详解
- 【C++ STL应用与实现】16: 迭代器综述
- 从零开始学C++之STL(十):迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}
- C++精华(STL)学习笔记之迭代器
- C++(17)STL实践与分析之再谈迭代器
- 【STL】C++的迭代器Interator
- C++ STL的迭代器(iterator)
- 【C++ STL学习之八】逆向迭代器reverse_iterator
- C++STL之迭代器
- C++ STL中迭代器介绍
- C++之STL(十):迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}
- C++标准模板库(STL)迭代器的原理与实现
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- 【C++】STL常用容器总结之一:容器与迭代器
- C++ STL之迭代器注意事项
- C++ STL源码学习(迭代器篇)
- C++ 中Traits技术 (5) —— 关于STL中对迭代器封装的类型介绍