• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed for (auto &x:vec) nie dla STL?

0 głosów
281 wizyt
pytanie zadane 7 września 2019 w C i C++ przez niezalogowany
zamknięte 7 września 2019

A mam taką małą dygresję. Niestety ciągle nie mogę puść do przodu w programowaniu, bo podstawy mnie zaskakują.

1) szukałem rozwiązania jak w cout<<____1____;

2) a rozczarowało mnie  cout<<____2____;

Tzn wiem jak to obejść, mniej więcej wiem dlaczego. Fakt wszędzie piszą żeby stosować iteratory. Ale zastanawiam się ile jeszcze  takich niespodzianek ma c++.

Taki mały kodzik wczytanie danych do vectora przez konstruktor

#include <iostream>
#include <vector>

class cinsomething
{

    int x;
    int count;
public:
    cinsomething ()
    {
        std::cin>>x;
        count=startcount++;
        std::cout<<"construstorNb = "<<construstorNb++<<"___________\n";
    }
    cinsomething(const int resetcount)
    {
        startcount=resetcount;
    }

    ~cinsomething ()
    {
        std::cout<<"construstorNb = "<<deconstrustorNb++<<"___________\n";
    }

    static int construstorNb;
    static int deconstrustorNb;
    static int startcount;

    friend std::ostream & operator << (std::ostream &, const cinsomething &);

};

std::ostream & operator << (std::ostream &os, const cinsomething & cin)
{
    return os<<"x="<<cin.x<<"\tcount="<<cin.count<<std::endl;
}

int cinsomething::construstorNb;
int cinsomething::deconstrustorNb;
int cinsomething::startcount;



using namespace std;

int main()
{
    {
        vector<cinsomething> vec(3);

        cout<<"_______1__________\n";

        for(auto &x:vec); //
        for(const auto &x:vec)
            cout<<x;

        cout<<"_______2__________\n";
        cinsomething(0);
        vec.resize(5);
        for(auto &x:vec)
            x=cinsomething();
        for(const auto &x:vec)
            cout<<x;


    }
cout<<"\n"<<cinsomething::construstorNb-cinsomething::deconstrustorNb;
cout<<"\n"<<cinsomething::construstorNb;
cout<<"\n"<<cinsomething::deconstrustorNb;


    return 0;
}

wyjście

11 12 13
construstorNb = 0___________
construstorNb = 1___________
construstorNb = 2___________
_______1__________
x=11    count=0
x=12    count=1
x=13    count=2
_______2__________
construstorNb = 0___________
21 22 23 24 25
construstorNb = 3___________
construstorNb = 4___________
construstorNb = 1___________
construstorNb = 2___________
construstorNb = 3___________
construstorNb = 5___________
construstorNb = 4___________
construstorNb = 6___________
construstorNb = 5___________
construstorNb = 7___________
construstorNb = 6___________
26 27
construstorNb = 8___________
construstorNb = 7___________
construstorNb = 9___________
construstorNb = 8___________
x=23    count=2
x=24    count=3
x=25    count=4
x=26    count=5
x=27    count=6
construstorNb = 9___________
construstorNb = 10___________
construstorNb = 11___________
construstorNb = 12___________
construstorNb = 13___________

-4
10
14

edit:: taka mała korekta po co mi drugi konstruktor.

komentarz zamknięcia: rozwiązane
komentarz 7 września 2019 przez MetGang Nałogowiec (34,360 p.)
W czym problem?
komentarz 7 września 2019 przez niezalogowany
edycja 7 września 2019
że wczytałem 21 22 23 24 25 vector ma 5 elementów więc powinno wystarczyć, niestety musiałem wczytać 26 27, bo dwa elementy nowe.

A najchętniej, to jak by ktoś powiedział jak wyczyścić vector nie tworząc nowego, aby  wystarczyło for(auto &x:vec); , bez wywoływania konstruktora po raz drugi x=kons();

edit:: nie mówiąc że destruktor uruchomił się 4 razy więcej niż konstruktor.
komentarz 7 września 2019 przez MetGang Nałogowiec (34,360 p.)
vec.clear() ?
komentarz 7 września 2019 przez niezalogowany
niestety nie działa :(

Edit :: Dzięki działa.  Nie ta kolejność wywołań. Sorki. Aż głupio ze nie pomyślałem.

Podobne pytania

0 głosów
1 odpowiedź 196 wizyt
pytanie zadane 7 listopada 2020 w C i C++ przez TOWaD Mądrala (6,800 p.)
0 głosów
2 odpowiedzi 296 wizyt
pytanie zadane 24 lipca 2018 w C i C++ przez MarcinGuziorHombre Początkujący (320 p.)
0 głosów
1 odpowiedź 1,627 wizyt
pytanie zadane 27 marca 2017 w C i C++ przez krzakurts Obywatel (1,470 p.)

93,772 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,375 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...