Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ . में डिजाइन हिट काउंटर

मान लीजिए हम एक हिट काउंटर डिजाइन करना चाहते हैं जो पिछले 5 मिनट में प्राप्त हिट की संख्या की गणना करता है। एक फ़ंक्शन होगा और वह दूसरी इकाई में टाइमस्टैम्प पैरामीटर स्वीकार करता है और हम मान सकते हैं कि कालक्रम क्रम में सिस्टम में कॉल किए जा रहे हैं (इसलिए, टाइमस्टैम्प एकरस रूप से बढ़ रहा है)। हम यह भी मानते हैं कि सबसे पुराना टाइमस्टैम्प 1 से शुरू होता है।

यह संभव है कि कई हिट एक ही समय में आ जाएं।

तो हम हिट () फ़ंक्शन को हिट करने के लिए कॉल करेंगे और हिट की गिनती प्राप्त करने के लिए हिट () फ़ंक्शन प्राप्त करेंगे।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • 300 आकार का एक सरणी समय परिभाषित करें

  • 300 आकार की एक सरणी हिट परिभाषित करें

  • फ़ंक्शन हिट को परिभाषित करें (), इसमें टाइमस्टैम्प लगेगा,

  • idx :=टाइमस्टैम्प मॉड 300

  • अगर समय [idx] टाइमस्टैम्प के बराबर नहीं है, तो -

    • समय [idx] :=टाइमस्टैम्प

    • हिट [idx] :=1

  • अन्यथा

    • हिट[idx] :=हिट[idx] + 1

  • फ़ंक्शन को परिभाषित करें getHits(), इसमें टाइमस्टैम्प लगेगा,

  • रिट:=0

  • इनिशियलाइज़ करने के लिए:=0, जब i <300, अपडेट करें (i से 1 बढ़ाएँ), करें -

    • अगर टाइमस्टैम्प - समय [i] <300, तो -

      • रिट :=रिट + हिट्स[i]

  • वापसी रिट

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
class HitCounter {
public:
   vector<int< time;
   vector<int< hits;
   HitCounter(){
      time = vector<int<(300);
      hits = vector<int<(300);
   }
   void hit(int timestamp){
      int idx = timestamp % 300;
      if (time[idx] != timestamp) {
         time[idx] = timestamp;
         hits[idx] = 1;
      }
      else {
         hits[idx] += 1;
      }
   }
   int getHits(int timestamp){
      int ret = 0;
      for (int i = 0; i < 300; i++) {
         if (timestamp - time[i] < 300) {
            ret += hits[i];
         }
      }
      return ret;
   }
};
main(){
   HitCounter ob;
   ob.hit(1);
   ob.hit(2);
   ob.hit(3);
   cout << (ob.getHits(4)) << endl;
   ob.hit(300);
   cout << (ob.getHits(300)) << endl;
   cout << (ob.getHits(301));
}

इनपुट

ob.hit(1);
ob.hit(2);
ob.hit(3);
ob.getHits(4);
ob.hit(300);
ob.getHits(300);
ob.getHits(301);

आउटपुट

3
4
3

  1. C++ . में समग्र डिजाइन पैटर्न

    समग्र पैटर्न का उपयोग किया जाता है जहां हमें वस्तुओं के समूह को एक ही वस्तु के समान व्यवहार करने की आवश्यकता होती है। समग्र पैटर्न भाग के साथ-साथ संपूर्ण पदानुक्रम का प्रतिनिधित्व करने के लिए एक वृक्ष संरचना की अवधि में वस्तुओं की रचना करता है। इस प्रकार का डिज़ाइन पैटर्न संरचनात्मक पैटर्न के अंतर्ग

  1. C++ सिंगलटन डिजाइन पैटर्न को समझाइए।

    सिंगलटन डिजाइन पैटर्न एक सॉफ्टवेयर डिजाइन सिद्धांत है जिसका उपयोग किसी वर्ग की तात्कालिकता को एक वस्तु तक सीमित करने के लिए किया जाता है। यह तब उपयोगी होता है जब पूरे सिस्टम में क्रियाओं के समन्वय के लिए एक वस्तु की आवश्यकता होती है। उदाहरण के लिए, यदि आप एक लकड़हारे का उपयोग कर रहे हैं, जो किसी फ़ा

  1. Linux पर C++ का सबसे अच्छा IDE क्या है?

    केवल टेक्स्ट एडिटर्स पर बड़े प्रोजेक्ट्स को मैनेज करना मुश्किल है। यदि आप ऐसे मामलों में आईडीई का उपयोग करते हैं तो आप अधिक उत्पादक और कम निराश होने की संभावना रखते हैं। विभिन्न प्रकार के आईडीई हैं और आपको अपनी आवश्यकताओं के अनुरूप सही का चयन करना चाहिए। Linux पर C++ के लिए एक भी सर्वश्रेष्ठ IDE नही