online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
/****************************************************************************** Online C++ Compiler. Code, Compile, Run and Debug C++ program online. Write your code in this editor and press "Run" button to compile and execute it. *******************************************************************************/ #include <iostream> #include <vector> #include <chrono> using namespace std; enum class ElementType { Element, CommonRafter, HipRafter, ValleyRafter, Purlin, WallPlate, CollarBeam }; class Element { public: virtual ~Element() = default; virtual ElementType type() const { return ElementType::Element; } }; class CommonRafter : public Element { public: ElementType type() const override { return ElementType::CommonRafter; } }; class HipRafter : public Element { public: ElementType type() const override { return ElementType::HipRafter; } }; class ValleyRafter : public Element { public: ElementType type() const override { return ElementType::ValleyRafter; } }; class Purlin : public Element { public: ElementType type() const override { return ElementType::Purlin; } }; class WallPlate : public Element { public: ElementType type() const override { return ElementType::WallPlate; } }; class CollarBeam : public Element { public: ElementType type() const override { return ElementType::CollarBeam; } }; class Tester { Element *commonRaftersPtr; Element *hipRaftersPtr; Element *valleyRaftersPtr; Element *purlinsPtr; Element *wallPlatesPtr; Element *collarBeamsPtr; public: void test1(Element *obj) { if ( dynamic_cast<CommonRafter *> (obj) ) { commonRaftersPtr = obj; return; } if ( dynamic_cast<HipRafter *> (obj) ) { hipRaftersPtr = obj; return; } if ( dynamic_cast<ValleyRafter *> (obj) ) { valleyRaftersPtr = obj; return; } if ( dynamic_cast<Purlin *> (obj) ) { purlinsPtr = obj; return; } if ( dynamic_cast<WallPlate *> (obj) ) { wallPlatesPtr = obj; return; } if ( dynamic_cast<CollarBeam *> (obj) ) { collarBeamsPtr = obj; } } void test2(CommonRafter *obj) { commonRaftersPtr = obj; } void test2(HipRafter *obj) { hipRaftersPtr = obj; } void test2(ValleyRafter *obj) { valleyRaftersPtr = obj; } void test2(Purlin *obj) { purlinsPtr = obj; } void test2(WallPlate *obj) { wallPlatesPtr = obj; } void test2(CollarBeam *obj) { collarBeamsPtr = obj; } void test3(Element *obj) { auto type = obj->type(); switch (type) { case ElementType::CommonRafter: commonRaftersPtr = obj; return; case ElementType::HipRafter: hipRaftersPtr = obj; return; case ElementType::ValleyRafter: valleyRaftersPtr = obj; return; case ElementType::Purlin: purlinsPtr = obj; return; case ElementType::WallPlate: wallPlatesPtr = obj; return; case ElementType::CollarBeam: collarBeamsPtr = obj; return; } } }; int main() { constexpr const int len = 1000000; std::vector<CommonRafter> v1(len); std::vector<HipRafter> v2(len); std::vector<ValleyRafter> v3(len); std::vector<Purlin> v4(len); std::vector<WallPlate> v5(len); std::vector<CollarBeam> v6(len); Tester tester; auto start = std::chrono::high_resolution_clock::now(); for (int i=0; i<len; i++) { tester.test1(&v1[i]); tester.test1(&v2[i]); tester.test1(&v3[i]); tester.test1(&v4[i]); tester.test1(&v5[i]); tester.test1(&v6[i]); } auto end = std::chrono::high_resolution_clock::now(); std::chrono::duration<double> diff1 = end-start; start = std::chrono::high_resolution_clock::now(); for (int i=0; i<len; i++) { tester.test2(&v1[i]); tester.test2(&v2[i]); tester.test2(&v3[i]); tester.test2(&v4[i]); tester.test2(&v5[i]); tester.test2(&v6[i]); } end = std::chrono::high_resolution_clock::now(); std::chrono::duration<double> diff2 = end-start; start = std::chrono::high_resolution_clock::now(); for (int i=0; i<len; i++) { tester.test3(&v1[i]); tester.test3(&v2[i]); tester.test3(&v3[i]); tester.test3(&v4[i]); tester.test3(&v5[i]); tester.test3(&v6[i]); } end = std::chrono::high_resolution_clock::now(); std::chrono::duration<double> diff3 = end-start; std::cout << "diff1: " << diff1.count() << endl; std::cout << "diff2: " << diff2.count() << endl; std::cout << "diff3: " << diff3.count() << endl; return 0; }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue