Czy da się jakoś dostać iterator na który wskazuje zmienna referencyjna w rfor

0
    for (const auto& row : Points)
        for (const auto& col : row)
            if (isMouseInsideRect(mousePos, col))
            {
                //tutaj chce dostać pozycję 
                //na której jest iterator w tablicy dwuwymiarowej, x i y
                int y = std::distance(Points.begin(), ...);
                int x = std::distance(row.begin(), ...);
            }

z tym by był banał ale w sumie to nwm co lepiej użyć


    for (int i = 0; i != 16; i++)
        for (int j= 0; j != 16; j++)

bo Points to array i wiem jaki mają rozmiar

0

Nie, ale jeśli to wektory/tablic/inne kontenery z ciągłymi danymi to możesz użyć wskaźników:

    for (const auto& row : Points)
        for (const auto& col : row)
            if (isMouseInsideRect(mousePos, col))
            {
                //tutaj chce dostać pozycję 
                //na której jest iterator w tablicy dwuwymiarowej, x i y
                int y = std::distance(Points.data(), &row);
                int x = std::distance(row.data(), &col);
            }

PS: co to rfor?

0

Bez tytułu.png

0

W sumie to mam jeszcze dwa pytania,
Jak przerwać podwójną pętlę (na stacku przeczytałem że to jedyna sytuacja w której mozna użyć goto x D, ale zrobiłem to z flagą. Może jakiś inny pomysł?)

oraz czy dobrze jest użyć tutaj tych funkcji ? Czy nie lepiej właśnie motyw z i i j.

0

Niestety, C++ nie ma break n, więc goto wydaje się tutaj akceptowalnym rozwiązaniem.

Co do użycia: zrób to co będzie czytelniejsze w Twojej ocenie. Ewentualnie zastanów się, czy indeksy są tutaj kluczowe, czy raczej na dokładkę (np. tylko debug print).

0

Nie bangla, data() nie zwraca consta
Bez tytułu.png

0

Jak nie jak tak? https://en.cppreference.com/w/cpp/container/array/data

Zamiast tego użyj &foo[0].

0

Chyba format kompa x D
Bez tytułu.png

                const auto *p = &Points[0];
                std::distance(p, &row);

tak działa

0

Czekaj, to nie .data() było problemem.

    for (const auto& row : Points)
        for (const auto& col : row)
            if (isMouseInsideRect(mousePos, col))
            {
                //tutaj chce dostać pozycję 
                //na której jest iterator w tablicy dwuwymiarowej, x i y
                auto const* points_begin = Points.data();
                int y = std::distance(points_begin, &row);
                int x = std::distance(row.data(), &col);
            }
0

niuanse niuansiki ... Chyba przejdę na pythona...
Points.data() zwracało stałą wartość a nie stały wskaźnik tak?
Mimo że właśnie zwracana wartość była wskaźnikiem pokazująca na consty ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0