12.复数类重载<< >>string类iterator迭代器
Posted 为了财务自由!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12.复数类重载<< >>string类iterator迭代器相关的知识,希望对你有一定的参考价值。
class CComplex
public:
CCOmplex(int r=0,int i=0)
:mreal(r),mimage(i)
//指导编译器如何做CComplex类对象的加法操作
CComplex operator+ (const CComplex& com)
CComplex comp;
comp.mreal = this->mreal + src.mreal;
comp.mimage = this->mimage + src.mimage;
return comp;
private:
int mreal;
int mimage;
:
编译器优先考虑成员方法(重载),没找到,那么去全局找!
//重载<< 输出类对象的值到命令行
ostream& operator<< (ostream& out, const CComplex& src)
out << "mreal:" << src.mreal << " mimage:" << src.mimage << endl;
return out;
istream& operator>>(istream& in,CComplex& src)
in >> src.mreal >> srcmimage;
return in;
//但是这写在类内是不行的!
//需要在类中写:
//friend ostream& operator<< (ostream& out, const CComplex& src);
//friend istream& operator>>(istream& in,CComplex& src);
string类
class String
public:
String(const char* p=nullptr)
if(p!=nullptr)
_pstr = new char[strlen(p)+1];
strcpy(_pstr,p);
else
_pstr = new char[1];
*_pstr = '\\0';
~String()
delete[] _pstr;
_pstr = nullptr;
String(const String& str)
_pstr = new char(sizeof(str._pstr)+1);
strcpy(_pstr,str._pstr);
String& operator=(const String& src)
if(this == &src)
return *this;
delete[] _pstr;
_pstr = new char[strlen(str._pstr.size)+1];
strcpy(_pstr,str._pstr);
return *this;
bool operator>(const String& str)const
return strcmp(_pstr,str._pstr)>0;
bool operator<(const String& str)const
return strcmp(_pstr,str._pstr)<0;
bool operator==(const String& str)const
return strcmp(_pstr,str._pstr)==0;
int length()const
return strlen(_pstr);
char& operator[](int index)
return _pstr[index];
const char& operator[](int index)const
return _pstr[index];
const char* c_str()const
return _pstr;
//给String字符串类型提供迭代器的实现
class iterator
public:
iterator(char* p=nullptr):_p(p)
bool operator!=(const iterator& it)
return _p!=it._p;
void operator++()
++_p;
char& operator*()
return *_p;
private:
char* _p;
;
iterator begin()//返回容器首元素的迭代器表示
return iterator(_pstr);
iterator end()//返回容器末尾元素后继位置的迭代器表示
return iterator(_pstr+length());
private:
char* _pstr;
friend String+(const String& lhs,const String& rhs);
friend ostream& operator<< (ostream& out, const CComplex& src);
;
//以下函数效率低下,等待优化!
//优化了一点,但是不够:(右值引用的时候继续优化!)
String operator+(const String& lhs,const String& rhs)
//char* ptmp = new char[strlen(lhs._pstr)+strlen(rhs._pstr)+1];
String tmp;
tmp._pstr = new char[strlen(lhs._pstr)+strlen(rhs._pstr)+1];
strcpy(tmp._pstr,lhs._pstr);
strcat(tmp._pstr,rhs._pstr);
//String tmp(ptmp);//调用构造,开辟内存,效率低下
//delete[] ptmp;
return tmp;
ostream& operator<< (ostream& out, const CComplex& src)
out << "mreal:" << src.mreal << " mimage:" << src.mimage << endl;
return out;
int main()
String str1 = "hello world!";
String::iterator it = str.begin();
for(;it!=str.end();++it)
cout << *it << " ";
cout << endl;
//C++11 foreach的方式来遍历容器内部元素的值
//底层还是通过迭代器实现的,也就是说遍历的对象必须有迭代器
for(char ch : str1)
cout << ch << " ";
cout << endl;
return 0;
泛型算法接受的都是迭代器
泛型算法-全局的函数-给所有的容器使用
泛型算法-有一套方式,能够统一的遍历所有的容器元素-迭代器
以上是关于12.复数类重载<< >>string类iterator迭代器的主要内容,如果未能解决你的问题,请参考以下文章