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

0 głosów
481 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,210 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,060 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,060 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,060 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 (158,580 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,060 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 (158,580 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 332 wizyt
0 głosów
1 odpowiedź 600 wizyt
0 głosów
2 odpowiedzi 631 wizyt

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...