vector与deque

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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值