Singleton set manager in c++ [on hold]












0












$begingroup$


I thought a singleton set manager is better than a global set. So I wrote a singleton set manager class C.



Minimal requirement of the class C




  1. must have insert() to insert a new item(int)

  2. must have has() to check if it has the item

  3. should be a singleton


Questions




  1. I wonder this is a good singleton implementation or not.

  2. How can I make this code better?


Code



#include <iostream>
#include <iterator>
#include <set>
#include <vector>
#include <initializer_list>

class C {
std::set<int> s;

public:
static C &getInstance() {
static C instance;
return instance;
}

bool insert(int i) {
std::pair<std::set<int>::iterator, bool> ret = s.insert(i);
return ret.second;
}

bool has(int i) {
return s.find(i) != s.end();
}

/* dump() is not essential */
void dump() {
std::copy(s.begin(), s.end(),
std::ostream_iterator<int>(std::cout, " "));
std::cout << "n";
}

private:
C() {}
/* prevent to call C(C const &) */
C(C const &);
/* prevent to call operator=() */
void operator=(C const &);
};

void foo(std::vector<int> &v) {
C &c = C::getInstance();
for (int i = 0; i < v.size(); i++) {
c.insert(v[i]);
}
}

void bar(std::vector<int> &v) {
C &c = C::getInstance();
for (int i = 0; i < v.size(); i++) {
std::cout << v[i] << " " << (c.has(v[i]) ? "y " : "n ");
}
std::cout << "n";
}

int main() {
std::vector<int> x{1, 3, 5, 7};
std::vector<int> y{1, 4};
std::vector<int> z{3, 4, 10};
C &c = C::getInstance();
c.dump();

foo(x);
c.dump();
bar(z);

foo(y);
c.dump();
bar(z);
}


Output



dump:
dump: 1 3 5 7
3 y 4 n 10 n
dump: 1 3 4 5 7
3 y 4 y 10 n









share|improve this question









$endgroup$



put on hold as off-topic by Jamal 2 hours ago


This question appears to be off-topic. The users who voted to close gave this specific reason:


  • "Lacks concrete context: Code Review requires concrete code from a project, with sufficient context for reviewers to understand how that code is used. Pseudocode, stub code, hypothetical code, obfuscated code, and generic best practices are outside the scope of this site." – Jamal

If this question can be reworded to fit the rules in the help center, please edit the question.


















    0












    $begingroup$


    I thought a singleton set manager is better than a global set. So I wrote a singleton set manager class C.



    Minimal requirement of the class C




    1. must have insert() to insert a new item(int)

    2. must have has() to check if it has the item

    3. should be a singleton


    Questions




    1. I wonder this is a good singleton implementation or not.

    2. How can I make this code better?


    Code



    #include <iostream>
    #include <iterator>
    #include <set>
    #include <vector>
    #include <initializer_list>

    class C {
    std::set<int> s;

    public:
    static C &getInstance() {
    static C instance;
    return instance;
    }

    bool insert(int i) {
    std::pair<std::set<int>::iterator, bool> ret = s.insert(i);
    return ret.second;
    }

    bool has(int i) {
    return s.find(i) != s.end();
    }

    /* dump() is not essential */
    void dump() {
    std::copy(s.begin(), s.end(),
    std::ostream_iterator<int>(std::cout, " "));
    std::cout << "n";
    }

    private:
    C() {}
    /* prevent to call C(C const &) */
    C(C const &);
    /* prevent to call operator=() */
    void operator=(C const &);
    };

    void foo(std::vector<int> &v) {
    C &c = C::getInstance();
    for (int i = 0; i < v.size(); i++) {
    c.insert(v[i]);
    }
    }

    void bar(std::vector<int> &v) {
    C &c = C::getInstance();
    for (int i = 0; i < v.size(); i++) {
    std::cout << v[i] << " " << (c.has(v[i]) ? "y " : "n ");
    }
    std::cout << "n";
    }

    int main() {
    std::vector<int> x{1, 3, 5, 7};
    std::vector<int> y{1, 4};
    std::vector<int> z{3, 4, 10};
    C &c = C::getInstance();
    c.dump();

    foo(x);
    c.dump();
    bar(z);

    foo(y);
    c.dump();
    bar(z);
    }


    Output



    dump:
    dump: 1 3 5 7
    3 y 4 n 10 n
    dump: 1 3 4 5 7
    3 y 4 y 10 n









    share|improve this question









    $endgroup$



    put on hold as off-topic by Jamal 2 hours ago


    This question appears to be off-topic. The users who voted to close gave this specific reason:


    • "Lacks concrete context: Code Review requires concrete code from a project, with sufficient context for reviewers to understand how that code is used. Pseudocode, stub code, hypothetical code, obfuscated code, and generic best practices are outside the scope of this site." – Jamal

    If this question can be reworded to fit the rules in the help center, please edit the question.
















      0












      0








      0





      $begingroup$


      I thought a singleton set manager is better than a global set. So I wrote a singleton set manager class C.



      Minimal requirement of the class C




      1. must have insert() to insert a new item(int)

      2. must have has() to check if it has the item

      3. should be a singleton


      Questions




      1. I wonder this is a good singleton implementation or not.

      2. How can I make this code better?


      Code



      #include <iostream>
      #include <iterator>
      #include <set>
      #include <vector>
      #include <initializer_list>

      class C {
      std::set<int> s;

      public:
      static C &getInstance() {
      static C instance;
      return instance;
      }

      bool insert(int i) {
      std::pair<std::set<int>::iterator, bool> ret = s.insert(i);
      return ret.second;
      }

      bool has(int i) {
      return s.find(i) != s.end();
      }

      /* dump() is not essential */
      void dump() {
      std::copy(s.begin(), s.end(),
      std::ostream_iterator<int>(std::cout, " "));
      std::cout << "n";
      }

      private:
      C() {}
      /* prevent to call C(C const &) */
      C(C const &);
      /* prevent to call operator=() */
      void operator=(C const &);
      };

      void foo(std::vector<int> &v) {
      C &c = C::getInstance();
      for (int i = 0; i < v.size(); i++) {
      c.insert(v[i]);
      }
      }

      void bar(std::vector<int> &v) {
      C &c = C::getInstance();
      for (int i = 0; i < v.size(); i++) {
      std::cout << v[i] << " " << (c.has(v[i]) ? "y " : "n ");
      }
      std::cout << "n";
      }

      int main() {
      std::vector<int> x{1, 3, 5, 7};
      std::vector<int> y{1, 4};
      std::vector<int> z{3, 4, 10};
      C &c = C::getInstance();
      c.dump();

      foo(x);
      c.dump();
      bar(z);

      foo(y);
      c.dump();
      bar(z);
      }


      Output



      dump:
      dump: 1 3 5 7
      3 y 4 n 10 n
      dump: 1 3 4 5 7
      3 y 4 y 10 n









      share|improve this question









      $endgroup$




      I thought a singleton set manager is better than a global set. So I wrote a singleton set manager class C.



      Minimal requirement of the class C




      1. must have insert() to insert a new item(int)

      2. must have has() to check if it has the item

      3. should be a singleton


      Questions




      1. I wonder this is a good singleton implementation or not.

      2. How can I make this code better?


      Code



      #include <iostream>
      #include <iterator>
      #include <set>
      #include <vector>
      #include <initializer_list>

      class C {
      std::set<int> s;

      public:
      static C &getInstance() {
      static C instance;
      return instance;
      }

      bool insert(int i) {
      std::pair<std::set<int>::iterator, bool> ret = s.insert(i);
      return ret.second;
      }

      bool has(int i) {
      return s.find(i) != s.end();
      }

      /* dump() is not essential */
      void dump() {
      std::copy(s.begin(), s.end(),
      std::ostream_iterator<int>(std::cout, " "));
      std::cout << "n";
      }

      private:
      C() {}
      /* prevent to call C(C const &) */
      C(C const &);
      /* prevent to call operator=() */
      void operator=(C const &);
      };

      void foo(std::vector<int> &v) {
      C &c = C::getInstance();
      for (int i = 0; i < v.size(); i++) {
      c.insert(v[i]);
      }
      }

      void bar(std::vector<int> &v) {
      C &c = C::getInstance();
      for (int i = 0; i < v.size(); i++) {
      std::cout << v[i] << " " << (c.has(v[i]) ? "y " : "n ");
      }
      std::cout << "n";
      }

      int main() {
      std::vector<int> x{1, 3, 5, 7};
      std::vector<int> y{1, 4};
      std::vector<int> z{3, 4, 10};
      C &c = C::getInstance();
      c.dump();

      foo(x);
      c.dump();
      bar(z);

      foo(y);
      c.dump();
      bar(z);
      }


      Output



      dump:
      dump: 1 3 5 7
      3 y 4 n 10 n
      dump: 1 3 4 5 7
      3 y 4 y 10 n






      c++ beginner singleton






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 3 hours ago









      H. JangH. Jang

      675




      675




      put on hold as off-topic by Jamal 2 hours ago


      This question appears to be off-topic. The users who voted to close gave this specific reason:


      • "Lacks concrete context: Code Review requires concrete code from a project, with sufficient context for reviewers to understand how that code is used. Pseudocode, stub code, hypothetical code, obfuscated code, and generic best practices are outside the scope of this site." – Jamal

      If this question can be reworded to fit the rules in the help center, please edit the question.




      put on hold as off-topic by Jamal 2 hours ago


      This question appears to be off-topic. The users who voted to close gave this specific reason:


      • "Lacks concrete context: Code Review requires concrete code from a project, with sufficient context for reviewers to understand how that code is used. Pseudocode, stub code, hypothetical code, obfuscated code, and generic best practices are outside the scope of this site." – Jamal

      If this question can be reworded to fit the rules in the help center, please edit the question.






















          0






          active

          oldest

          votes

















          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes

          Popular posts from this blog

          How to reconfigure Docker Trusted Registry 2.x.x to use CEPH FS mount instead of NFS and other traditional...

          is 'sed' thread safe

          How to make a Squid Proxy server?