• 大小: 0.12M
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2024-04-17
  • 语言: C/C++
  • 标签: STL  实现  ST  

资源简介

要求实现与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

评论

共有 条评论