STL迭代器相关的输出迭代器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL迭代器相关的输出迭代器相关的知识,希望对你有一定的参考价值。
我的基类定义是这样的
template< class T >
class Matrix_B
�
protected:
�
string FileInp;
string FileOut;
unsigned int RowSize,
ColSize;
vector< vector< T > > pMatrix;
public:
Matrix_B( unsigned int nrow = 2,
unsigned int ncol = 2,
string FileInp = "matrix.in",
string FileOut = "matrix.out" );
void ReadMatrix( void );
void PrintMatrix( char *pHeader = "" );
;
下面是我之前的PrintMatrix函数
template < class T >
void Matrix_B< T >::PrintMatrix ( char *pHeader )
...
fout << pHeader << endl;
for( unsigned int i = 0 ; i < RowSize ; i++ )
for( unsigned int j = 0 ; j < ColSize ; j++ )
if( j % ColSize == 0 )
fout << endl;
fout << pMatrix[ i ][ j ] << " ";
...
我之前的PrintMatrix函数是可以正常的运行的,但是我们老师要求我们用迭代器iterator 完成输出,不知道应该怎么弄,因为输出矩阵不比输出一维数组,输出时要考虑换行,当if( j % ColSize == 0 )要换行,我如果用流迭代器怎么弄?用copy?但是换行是一个难点,希望高手解答下!
一楼似乎没有看明白我的问题,我是要把矩阵写入fout 文件指针所指的文件中,要使用迭代器,但是由于是矩阵,要考虑在相应位置换行,所以不知道应该如何实现.
#include<iostream>
#include<iterator>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
int main()
istream_iterator<string> ii(cin);
istream_iterator<string> eos;
vector<string>v(ii,eos);
typedef vector<string>::reverse_iterator MI;
typedef vector<string>::iterator KI;
MI ri=find(v.rbegin(),v.rend(),"guo");
KI i=ri.base();
//返回ri后一个元素的迭代器,因此如果想取得查到的元素的迭代器的话,用i-1就可以得到。
//本code为了看效果,正好输出其后的元素。
cout<<(*i)<<endl;
KI li=find(v.begin(),v.end(),"guo");
cout<<(*(--li))<<endl;
// 输出其前一个元素
//输入 li guo guo qiang EOF(Ctrl+Z)
//输出 qiang li 参考技术B template < class T >
void Matrix_B< T >::PrintMatrix ( char *pHeader )
...
fout << pHeader << endl;
vector<vector<T>>::iterator it= pMatrix.begin();
while(it != pMatrix.end())
vector<T>::iterator itSec= it->begin();
while(itSec != it->end())
fout<<*itSec<<" ";
++itSec;
fout<<endl;
++it;
getchar();
STL 笔记 迭代器 iterator
- Input iterators 仅仅读,输入迭代器,支持如:istream
- Output iterators 仅仅写,输出迭代器。支持如:ostream、inserter
- Forward iterators 读写,前向迭代器。仅仅能前向移动
- Bidirectional iterators 读写,双向迭代器,可以双向移动。支持如: list、set、map
- Random access iterators 读写,随机迭代器,可以随机訪问,支持如:vector、deque、string
从功能上看,输入和输出迭代器并列,然后前向迭代器、双向迭代器和随机迭代器之间的关系就类似于类的继承关系。比方。能够将随机訪问迭代器作为双向迭代器或前向迭代器来使用。
举例:
stl 中的 find 函数须要输入迭代器:
template <class _InputIter, class _Tp> inline _InputIter find(_InputIter __first, _InputIter __last, const _Tp& __val, input_iterator_tag) { while (__first != __last && !(*__first == __val)) ++__first; return __first; }
stl 中 的 generate_n 函数须要输出迭代器:
/* The generate_n algorithm traverses the range [first, first + n) assigning to each element the value returned by gen. Note that generate modifies the elements in the specified range. */ template <class _OutputIter, class _Size, class _Generator> _OutputIter generate_n(_OutputIter __first, _Size __n, _Generator __gen) { __STL_REQUIRES(_OutputIter, _OutputIterator); for ( ; __n > 0; --__n, ++__first) *__first = __gen(); return __first; }
stl 中 replace 函数要求前向迭代器:
template <class _ForwardIter, class _Tp> void replace(_ForwardIter __first, _ForwardIter __last, const _Tp& __old_value, const _Tp& __new_value) { __STL_REQUIRES(_ForwardIter, _Mutable_ForwardIterator); __STL_REQUIRES_BINARY_OP(_OP_EQUAL, bool, typename iterator_traits<_ForwardIter>::value_type, _Tp); __STL_CONVERTIBLE(_Tp, typename iterator_traits<_ForwardIter>::value_type); for ( ; __first != __last; ++__first) if (*__first == __old_value) *__first = __new_value; }
stl 中的 reverse 函数要求双向迭代器:
template <class _BidirectionalIter> inline void reverse(_BidirectionalIter __first, _BidirectionalIter __last) { __STL_REQUIRES(_BidirectionalIter, _Mutable_BidirectionalIterator); __reverse(__first, __last, __ITERATOR_CATEGORY(__first)); }
stl 中的 sort 函数要求随机訪问迭代器:
template <class _RandomAccessIter> inline void sort(_RandomAccessIter __first, _RandomAccessIter __last) { __STL_REQUIRES(_RandomAccessIter, _Mutable_RandomAccessIterator); __STL_REQUIRES(typename iterator_traits<_RandomAccessIter>::value_type, _LessThanComparable); if (__first != __last) { __introsort_loop(__first, __last, __VALUE_TYPE(__first), __lg(__last - __first) * 2); __final_insertion_sort(__first, __last); } }
【原文:http://blog.csdn.net/thisinnocence/article/details/39909787】
以上是关于STL迭代器相关的输出迭代器的主要内容,如果未能解决你的问题,请参考以下文章