Dynamsiches Array



  • GhostfaceChilla schrieb:

    Hallo Leutem ich wollte ein Array erstellen, welches sich immer wieder um 1 erweiter, wenn ich etwas eingebe.

    Warum solltest du sowas tun wollen?

    sizeof(dnmc_array) tut nicht was du denkst. Was ist sizeof(void*)? sizeof(int*) - welchen Typ hat dnmc_array?

    Warum hast du es eigentlich nicht dnmcrry, tmprry, nmbr und sz genannt, wo du schon zur besseren Lesbarkeit Vokale rauswirfst? 🙄

    Dein Programm bricht übrigens nicht ab, es stürzt ab, weil du über das allokierte Ende von tmp_array hinaus zugreifst.

    Dein Programm in C++:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main()
    {
      int number;
      vector<int> allNumbers;
      while(cin >> number)
      {
        allNumbers.push_back(number);
      }
    }
    

    Oder auch:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <iterator>
    using namespace std;
    
    int main()
    {
      std::vector<int> numbers;
    
      typedef istream_iterator<int> intIt;
      std::copy(intIt(cin), intIt(), back_inserter(numbers));
    }
    


  • pumuckl schrieb:

    Oder auch:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <iterator>
    using namespace std;
    
    int main()
    {
      std::vector<int> numbers;
      
      typedef istream_iterator<int> intIt;
      std::copy(intIt(cin), intIt(), back_inserter(numbers));
    }
    
    #include <iostream>
    #include <vector>
    #include <iterator>
    using namespace std;
    
    int main()
    {
      typedef istream_iterator<int> intIt;
      vector<int> numbers(intIt(cin), intIt());
    }
    

    🤡



  • Kellerautomat schrieb:

    🤡

    Autsch, mein Brett vorm Kopp...



  • typedef istream_iterator<int> intIt;
    vector<int> numbers(intIt(cin), (intIt()));  // most vexing parse
    

    Auch nur drüber gestolpert... 🙂



  • Muss nicht. Nur MSVC ist zu doof dafuer, afaik.
    Edit: http://ideone.com/B9nVT



  • Kellerautomat schrieb:

    Muss nicht. Nur MSVC ist zu doof dafuer, afaik.

    GCC auch 😉



  • Siehe Edit. Das ist ganz eindeutig ein Konstruktoraufruf.



  • Kellerautomat schrieb:

    Siehe Edit. Das ist ganz eindeutig ein Konstruktoraufruf.

    Nö, das ist ein typedef und eine Funktionsdeklaration, was natürlich kompiliert. Erst wenn du mit dem vector arbeiten willst gehts schief:

    http://ideone.com/j3wzi

    #include <iostream>
    #include <vector>
    #include <iterator>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
      typedef istream_iterator<int> intIt;
      vector<int> numbers(intIt(cin), intIt());
    
      copy(numbers.begin(), numbers.end(), ostream_iterator<int>(cout, "; "));
    }
    
    prog.cpp: In function ‘int main()’:
    prog.cpp:12: error: request for member ‘begin’ in ‘numbers’, which is of non-class type ‘std::vector<int, std::allocator<int> > ()(main()::intIt, main()::intIt (*)())’
    prog.cpp:12: error: request for member ‘end’ in ‘numbers’, which is of non-class type ‘std::vector<int, std::allocator<int> > ()(main()::intIt, main()::intIt (*)())’
    


  • Ah lol, das war natuerlich doof von mir. Aber was zur Hoelle ist denn das fuer eine Funktionsdeklaration, naemlich intIt(cin). Was soll denn das sein? 😮



  • das cin in Klammern ist zwar ungewöhnlich, aber gültig - einfach der Name des Parameters 😉

    void foo( int (bar) ) //void foo(int bar)
    { std::cout << bar; }
    


  • Strange. Wer denkt sich denn sowas aus.



  • Kellerautomat schrieb:

    Strange. Wer denkt sich denn sowas aus.

    ="Jack Sparrow"]Das waren die Franzosen.


Anmelden zum Antworten