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

Jaką funkcję pełni ":" w c++

Object Storage Arubacloud
0 głosów
321 wizyt
pytanie zadane 27 sierpnia 2020 w C i C++ przez Pogchampik Nowicjusz (140 p.)

Byłby ktoś w stanie mi wytłumaczyć jaką funkcję pełni ":" w warunku drugiej pętli?

#include <iostream>



using namespace std;

int t;
int x;
constexpr size_t size = 2;
int table[size];

int main()
{

    cin >> t;
    for(int i=0; i<t; i++)
    {


        for(int &el: table)
        {
            cin >> el;
        }
    int wynik;
    wynik = (2 * table[0] * table[1])/(table[0] + table[1]);
    cout << wynik <<endl;

    }


    return 0;
}

 

4 odpowiedzi

+1 głos
odpowiedź 28 sierpnia 2020 przez Piotr Batko Stary wyjadacz (13,190 p.)
int numbers[] = {1, 2, 3};
for (int number : numbers)
{
   std::cout << number << std::endl;
}

To znaczy wykonuj pętlę dla każdego inta z tablicy numbers. Wewnątrz pętli na każdego z tych intów będę mówić number.

Bardzo wygodny sposób pisania pętli. Radzę Ci korzystać z niego kiedy tylko się da, (czasami niestety się nie da i trzeba użyć starszej konstrukcji).

0 głosów
odpowiedź 27 sierpnia 2020 przez tkz Nałogowiec (42,000 p.)
0 głosów
odpowiedź 27 sierpnia 2020 przez Zaqu93 Gaduła (4,850 p.)
To jest range loop lub forEach iteruje przez każdy element tablicy/wektora.
1
komentarz 27 sierpnia 2020 przez tkz Nałogowiec (42,000 p.)
I tak, i nie. for each, to to nie jest, ponieważ w standardzie znajduję się taki twór w nagłówku z algorytmami. for each jako skrót myślowy - tak, jako poprawne określenie w C++ - nie.
Iteruje przez każdy obiekt, posiadając, lub będący w stanie posiadać iteratory(inaczej mówiąc wskaźniki na wybrany element(w zależności od kontenera oczywiście)).
komentarz 27 sierpnia 2020 przez Zaqu93 Gaduła (4,850 p.)
Z tym forEach wybacz naleciałość z JS. Jeżeli chodzi o drugą cześć z iteratorami to nie wiedziałem, ponieważ miałem z nimi narazie do czynienia raz i nie zagłębiałem się jeszcze za bardzo w to pojęcie :)
0 głosów
odpowiedź 28 sierpnia 2020 przez DamianW Bywalec (2,080 p.)

Konstrukcja ta służy do iterowania przez tablice bądź klasy kontenerowe. Biblioteka standardowa zapewnia mnóstwo kontenerów do których można zastosować tę konstrukcje. Możesz również samemu napisać własny kontener , który może być iterowany przez tę konstrukcję, ale musi spełniać szereg warunków , które są zawarte w tym linku : https://stackoverflow.com/questions/8164567/how-to-make-my-custom-type-to-work-with-range-based-for-loops

///
#include <vector>
std::vector vec{1,2,3}; 
for(int x : vec) //niech x będzie reprezentacją każdego elementu wektora w każdej iteracji
     ++x;
///

 

2
komentarz 28 sierpnia 2020 przez tkz Nałogowiec (42,000 p.)
x będzie reprezentantem kopii każdego elementu z wektora. Więc inkrementacja jest kompletnie bezsensu, o ile nie będzie wykorzystana w danym obiegu pętli.
komentarz 29 sierpnia 2020 przez mokrowski Mędrzec (155,460 p.)
edycja 29 sierpnia 2020 przez mokrowski

Oczywiście :) Jeśli ma mieć sens....

///
#include <vector>
std::vector vec{1,2,3}; 
for(int& x : vec) //niech x będzie reprezentacją referencji każdego elementu wektora w każdej iteracji
     ++x;
///

Poza tym, warto wiedzieć że....

#include <iostream>
#include <string>

class X {
public:
	X(const std::string & name)
       	: name{name} {}
	void show() const {
		std::cout << name << '\n';
	}
private:
	const std::string name;
};

int main() {
	X x1{"boom"};
	X x2{"tara"};
	X x3{"puszzz"};
	for(const auto& x: {&x1, &x2, &x3}) {
		x->show();
	}
}

 

komentarz 29 sierpnia 2020 przez tkz Nałogowiec (42,000 p.)
Że lista inicjalizująca kopiuję obiekty, które do niej przekazujemy? Bo nie jestem pewny, czy dobrze zrozumiałem zamysł zwrócenia uwagi akurat na ten przypadek.
komentarz 29 sierpnia 2020 przez mokrowski Mędrzec (155,460 p.)
Raczej chodzi o to że lista inicjalizacyjna przy takiej składni for, jest bardzo wygodna i czytelna. To czy kopiuje czy trzyma wskaźniki, to już sprawa inna. Także inną rzeczą jest obsługa polimorfizmu i dedukcji typu w liście inicjalizacyjnej.

Podobne pytania

0 głosów
0 odpowiedzi 160 wizyt
0 głosów
1 odpowiedź 454 wizyt
0 głosów
2 odpowiedzi 476 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...