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

C++ . में 2D वेक्टर को समतल करें

मान लीजिए कि हमारे पास एक 2D वेक्टर है, हमें उस 2d वेक्टर को समतल करने के लिए एक इटरेटर को डिज़ाइन और कार्यान्वित करना होगा। अलग-अलग तरीके इस प्रकार होंगे -

  • अगला () - यह वर्तमान तत्व का अगला तत्व लौटाएगा

  • hasNext() - यह जांच करेगा कि अगला तत्व मौजूद है या नहीं

इसलिए, यदि इनपुट [[1,2],[3],[4]] जैसा है, तो यदि हम फंक्शन्स को इस प्रकार कहते हैं -

  • iterator.next ();

  • iterator.next ();

  • iterator.next ();

  • iterator.hasNext ();

  • iterator.hasNext ();

  • iterator.next ();

  • iterator.hasNext ();

तो आउटपुट [1,2,3,सत्य, सत्य,4,झूठा]

. होगा

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

  • एक 2डी सरणी को परिभाषित करें v

  • प्रारंभकर्ता को परिभाषित करें यह एक 2D सरणी v लेगा,

  • पंक्ति सूचक :=0

  • colPointer :=0

  • n:=वी का आकार

  • जबकि (rowPointer =size of v[rowPointer]), करते हैं -

    • (पंक्ति सूचक को 1 से बढ़ाएं)

  • अगला फ़ंक्शन परिभाषित करें ()

  • x :=v[rowPointer, colPointer]

  • (colPointer को 1 से बढ़ाएं)

  • यदि colPointer v[rowPointer] के आकार के समान है, तो -

    • colPointer :=0

    • (पंक्ति सूचक को 1 से बढ़ाएं)

    • जबकि (rowPointer =size of v[rowPointer]), करते हैं -

      • (पंक्ति सूचक को 1 से बढ़ाएं)

  • वापसी x

  • फ़ंक्शन को परिभाषित करें hasNext()

  • जब पंक्ति सूचक n के समान हो तो झूठी वापसी करें

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
class Vector2D {
public:
   int rowPointer, colPointer;
   int n;
   vector<vector<int< > v;
   Vector2D(vector<vector<int< >& v){
      this->v = v;
      rowPointer = 0;
      colPointer = 0;
      n = v.size();
      while (rowPointer < n && colPointer >= v[rowPointer].size()){
         rowPointer++;
      }
   }
   int next(){
      //cout << rowPointer << " " << colPointer << endl;
      int x = v[rowPointer][colPointer];
      colPointer++;
      if (colPointer == v[rowPointer].size()) {
         colPointer = 0;
         rowPointer++;
         while (rowPointer < n && colPointer >= v[rowPointer].size()) {
            rowPointer++;
         }
      }
      return x;
   }
   bool hasNext(){
      return !(rowPointer == n);
   }
};
main(){
   vector<vector<int<> v = {{1,2},{3},{4}};
   Vector2D ob(v);
   cout << (ob.next()) << endl;
   cout << (ob.next()) << endl;
   cout << (ob.next()) << endl;
   cout << (ob.hasNext()) << endl;
   cout << (ob.next()) << endl;
   cout << (ob.hasNext());
}

इनपुट

ob.next()
ob.next()
ob.next()
ob.hasNext()
ob.next()
ob.hasNext()

आउटपुट

1
2
3
1
4
0

  1. सी ++ में कन्स्ट्रक्टर को वेक्टर पास करना

    यह एक कंस्ट्रक्टर को वेक्टर पास करने के लिए एक सरल C++ प्रोग्राम है। एल्गोरिदम Begin    Declare a class named as vector.       Declare vec of vector type.       Declare a constructor of vector class.          Pass a vector object v as

  1. वेक्टर ::आकार () बनाम वेक्टर ::रिजर्व () सी ++ में

    जब कोई तत्व डाला या हटाया जाता है, तो वेक्टर स्वचालित रूप से गतिशील सरणी की तरह आकार बदलने की क्षमता रखता है, कंटेनर स्वचालित रूप से अपने भंडारण को संभालता है। वेक्टर आकार () और वेक्टर रिजर्व () के बीच मुख्य अंतर यह है कि आकार बदलने () का उपयोग वेक्टर के आकार को बदलने के लिए किया जाता है जहां रिजर्

  1. C++ में Inference टाइप करें

    टाइप अनुमान या कटौती एक प्रोग्रामिंग भाषा में डेटा प्रकार के एक अभिव्यक्ति की स्वचालित पहचान को संदर्भित करता है। यह कुछ दृढ़ता से टाइप की गई भाषाओं में मौजूद एक विशेषता है। सी ++ में, ऑटो कीवर्ड (सी ++ 11 में जोड़ा गया) का उपयोग स्वचालित प्रकार की कटौती के लिए किया जाता है। उदाहरण के लिए, आप एक वेक