• 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?

Object Storage Arubacloud
0 głosów
125 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ź 73 wizyt
pytanie zadane 7 listopada 2020 w C i C++ przez TOWaD Mądrala (6,000 p.)
0 głosów
2 odpowiedzi 152 wizyt
pytanie zadane 24 lipca 2018 w C i C++ przez MarcinGuziorHombre Początkujący (320 p.)
0 głosów
1 odpowiedź 472 wizyt
pytanie zadane 27 marca 2017 w C i C++ przez krzakurts Obywatel (1,470 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...