資源簡介
要求實現與C 標準庫類似的數據結構,包括迭代器等。框架接口在已本倉庫中給出,只需要實現`.hpp`文件內所要求的內容即可。
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?“deque.hpp“
#include?“exceptions.hpp“
/***************************/
bool?need_to_check_throw?=?1;
bool?good_complexity?=?1;//if?the?complexity?is?N^2?change?to?0
int?N?=?good_complexity???50000?:?1000;
/***************************/
class?T{
private:
int?x;
public:
T(int?x):x(x){}
int?num()const?{return?x;}
void?change(int?y){
x?=?y;
}
};
bool?operator?==?(const?T?&a?const?T?&b){
return?a.num()?==?b.num();
}
bool?operator?!=?(const?T?&a?const?T?&b){
return?a.num()?!=?b.num();
}
sjtu::deque?q;
std::deque?stl;
sjtu::deque::iterator?it_q;
std::deque::iterator?it_stl;
sjtu::deque::const_iterator?_it_q;
std::deque::const_iterator?_it_stl;
bool?equal(){
if(q.size()?!=?stl.size())?return?0;
if(q.empty()?!=?stl.empty())?return?0;
int?cnt?=?0;
for(it_q?=?q.begin()?it_stl?=?stl.begin();?it_q?!=?q.end()?||?it_stl?!=?stl.end();?it_q++?it_stl++){
if(*it_q?!=?*it_stl)?{
printf(“cnt?=?%d\n“cnt);
return?0;
}
cnt++;
}
return?1;
}
void?test1(){
printf(“test1:?push?&?pop????????????????????“);
for(int?i=1;i<=N;i++){
if(i?%?10?<=?3)?q.push_back(T(i))?stl.push_back(T(i));else
if(i?%?10?<=?7)?q.push_front(T(i))?stl.push_front(T(i));else
if(i?%?10?<=?8)?q.pop_back()?stl.pop_back();else
if(i?%?10?<=?9)?q.pop_front()?stl.pop_front();
}
if(!equal()){puts(“Wrong?Answer“);return;}
while?(!q.empty()){
q.pop_back();
stl.pop_back();
}
puts(“Accept“);
}
void?test2(){
printf(“test2:?at?&?[]?&?front?&?back????????“);
int?flag?=?0;
try{
int?t?=?q.front().num();
}catch(...){flag?++;}
try{
int?t?=?q.back().num();
}catch(...){flag?++;}
if(flag?!=?2?&&?need_to_check_throw){puts(“Wrong?Answer“);return;}
for(int?i=1;i<=N;i++){
if(i?%?10?<=?3)?q.push_back(T(i))?stl.push_back(T(i));else
if(i?%?10?<=?7)?q.push_front(T(i))?stl.push_front(T(i));else
if(i?%?10?<=?8)?q.pop_back()?stl.pop_back();else
if(i?%?10?<=?9)?q.pop_front()?stl.pop_front();
}
flag?=?0;
try{
int?t?=?(q.at(q.size()?+?100)).num();
}catch(...){flag?=?1;}
if(flag?!=?1?&&?need_to_check_throw){puts(“Wrong?Answer“);return;}
int?num?=?q.size();
for(int?i=0;i<100;i++)
{
int?t?=?rand()?%?num;
if(q[t]?!=?stl[t]?||?q.at(t)?!=?stl.at(t)){puts(“Wrong?Answer“);return;}
}
if(q.front()?!=?stl.front()?||?q.back()?!=?stl.back()){puts(“Wrong?Answer“);return;}
puts(“Accept“);
}
void?test3(){
printf(“test3:?itetator?operation????????????“);
int?num?=?q.size();
for(int?i?=1?;?i?<=?1000;?i++)
{
int?t1?=?rand()?%?num;
int?t2?=?rand()?%?num;
if(*(q.begin()?+?t1)?!=?*(stl.begin()?+?t1)){puts(“Wrong?Answer“);return;}
if(t2?&&?*(q.end()?-?t2)?!=?*(stl.end()?-?t2)){puts(“Wrong?Answer“);return;}
if((q.begin()?+?t1)?-?(q.begin()?+?t2)?!=?(t1?-?t2)){puts(“Wrong?Answer“);return;}
}
if((q.begin()?+?num)?!=?q.end())?{puts(“Wrong?Answer“);return;}
if((q.end()?-?num)?!=?q.begin())?{put
評論
共有 條評論