STL (一) vector 与 deque
vector相当于一个动态数组,是顺序储存结构,deque也一样。但deque对于vector的优势在于删除数后维护顺序结构时可以更快速。
以下为利用vector实现的大数相加算法。
Have fun coding,i_human.Have fun coding,everyone!
THE CODE:
// vector使用.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<vector>
#include<iostream>
using namespace std;
class longint
{
friend istream & operator >>(istream &,longint & a);
friend ostream & operator <<(ostream &,const longint a);
private:
vector <char> digits;
char least(unsigned i) const;
public:
longint():digits(0){};
longint operator + (const longint & b);
};
istream & operator >>(istream & instream,longint & a)
{
const char first='0';
const char last ='9';
const char end='x';
char dgist;
a.digits.erase(a.digits.begin(),a.digits.end());
do{
instream>>dgist;
if((first<=dgist)&&(dgist<=last)) //字符串中只取数字
a.digits.push_back(dgist-first); //写入向量
}while(dgist!=end);
return instream;
}
ostream& operator <<(ostream& oustream,longint a)
{
vector<char>::iterator itr;
for(itr=a.digits.begin();itr!=a.digits.end();itr++) //迭代器
oustream<<(int)(*itr);
return oustream;
}
char longint::least(unsigned i) const
{
if(i>=digits.size())
return 0;
else
return digits[digits.size()-i-1];
}
longint longint::operator +(const longint & b)
{
unsigned carry =0,length;
longint sum;
if(digits.size()>b.digits.size())
length=digits.size();
else
length=b.digits.size();
for(unsigned i=0;i<length;i++)
{
sum.digits.push_back((least(i)+b.least(i)+carry)%10);
carry=0;
if(least(i)+b.least(i)+carry>=10)
carry=1;
}
if(carry==1)
sum.digits.push_back(carry);
reverse(sum.digits.begin(),sum.digits.end());
return sum;
}
int main()
{
longint a,b;
cin>>a;
cin>>b;
cout<<a<<endl<<b<<endl;
longint c=a+b;
cout<<c<<endl;
system("pause");
return 0;
}